It doesn't. The major purpose of a university is to produce scientists who do research, not software engineers who write crud apps. We, the software engineers, are just a byproduct.
> they should hire people who actually know how to teach it
They can't and they shouldn't. Why would one want to teach at a university when (s)he has enough skills to work at a company for a big fat compensation, and, possibly, equity? The only way to attract those people to the universities would be for the universities to offer much higher salaries, which would consequently drive up the cost of education (in my own country it wouldn't even work, because education is "free", i.e. mostly paid for by the government). And for what - to teach the students something they could have easily picked up on their own by poking around the internets or participating in internships? That is not optimal. If you study formal grammars in class and don't try writing your own little lexer/parser at home, it's your own fault, don't blame the university. It has taught you everything you need to know to write a parser, and it's your job to put it to use.
These tracks were generally all theoretical (the exceptions being some classes in platforms and devices), even my friends who had a love for software engineering ended up learning the thoughts behind each process rather than blindly learning the process itself in order to master said process that is currently practical.
The way I treated academic learning is very similar to the process described above by 10098. The learning you experience in college should be some form of aggregate information about past ideas/trials and tribulations. This is the process by which I (as a customer) have found most universities treat their undergraduates. Rather than tailoring them to become masters of a specific problem they try (albeit not successfully, and there are a vast number of people in universities today that don't enjoy, want to have, or have this mindset) to build the next generation of people to find flaws in our current society, in hopes that they have motivation to fix it.
That being said you are making the argument that software engineering is a vocational skill. While I'm not denying that the majority of the process that I've found in my limited time in the industry tends to be filled with skills that are akin to any other vocational profession, I don't believe increasing vocational skills help the students. It might in a short term give them a strong basis for obtaining a software related position. It might also give them the ability to perform really well in their jobs at that time being. It does however not enable them to question the process they've learned. It also does not help them find problems within a process.
It should also be noted that most companies aren't looking for a master software engineer. They test for intelligence and social skills rather than how strict the student is on testing practices or which design cycle they prefer. These biases also lead towards limiting employment because they'll end up fighting rather than adapting to the new work environment that is already established by the companies views on the subject.
A lot of top schools are taking interest in teaching up to date languages, maybe not clojure or even javascript but python is the language that I've seen most Georgia Tech students prefer to program in after taking several courses in it.
http://www.cc.gatech.edu/future/undergraduates/threads http://www.cc.gatech.edu/future/undergraduates/bscs/roles/ma...