Let's say I run a model of Depression (Y) as a function of Drug use (X), and I have somehow magically controlled for all other variable that might be correlated with both X and Y, and the beta for drug use is positive. Does that mean drug use causes depression? Maybe, but it might also be that depression causes drug use. In fact both of these causal relationships might exist simultaneously, but even this magical model can't distinguish between them. This is sometimes referred to as reciprocal causation.
In general a regression model (linear or otherwise) run on observational data at a single point in time can't distinguish between X->Y or Y->X. Even though we TRY to choose our X and Y variable so that X is causally prior to Y, that's often not possible, as the depression example shows - and really many of the most interesting questions in psychology, political science, sociology, and economics involve relationships where reciprocal causation is one of the major threats to validity.
A true randomized control design solves this problem because it ensures that NOTHING (not even Y itself) is correlated with assignment to the treatment X, but you can't replicate this in a standard regression model because you can't have Y on both sides of the equation at the same time. So the best alternative is to bring in "time:" if having certain X value at time 1 is associated with having a certain Y value at time 2, or that a change in X is associated with a subsequent change in Y, you can be sure that this relationship is not due to Y causing X.
This explains the popularity of research designs that incorporate time, such as difference-in-difference models, time series analysis, etc.