The most fundamental problem is the risk involved in making a decision. When you hire the wrong person it hurts badly. It's painful, stressful, and expensive -- usually for both parties.
One way I've found to mitigate this is by having potential employees work on a contract job first.
The trend right now is for job sites to employ programming tests and the like, but I don't think these answer most of the hard questions you have about a potential employee.
A hybrid Elance/Monster might be just the ticket though. Employers post real jobs, like "Port our Oracle stored procedures to Postgres" or "Rewrite this Ruby server daemon to support XYZ", then they work together with candidates on the project, while paying them. Employers would make full-time offers to people who do well.
Employers might pay three candidates to do the same job and then pick which one did the best. Still far cheaper than a recruiter.
Candidates that don't look good on paper might even volunteer to do work for free/cheap just to prove they have what it takes. I know I would have before I had job experience.