I think a central reason is that CSS was originally intended for laying out text instead of laying out web applications. So what many programmers do/did with it was something that CSS was not originally intended and thus not optimized for, i.e. a lot of people use(d) (out of necessity) CSS in a very "hacky" way.