To some extent I agree that virtualizing at the hardware level (particularly PC hardware!) is the wrong level. Ordinary Unix processes are another sort of virtualization, and one which is far more efficient.
However there are three facts that get in the way of doing the right thing:
(1) Does it run Windows?
(2) We've got Intel and AMD making PC virtualization acceptably fast nowadays, so it makes sense to just use that.
(3) Isolation between processes is not very strong [not sure about virtualenv] but between machines is a great deal stronger because people have a lot more experience protecting networked machines from each other.
1. You can virtualize fine on Windows. IIS does a wonderful job of virtualizing network services. (as of 2008 that is). And windows services are a form of secure process-level virtualization are they not?
2. It's acceptable until you whack several kernels and OS' on a machine, all running lots of processes at which point everything suffers. Cache locality goes AWOL, cache utilisation is shared, bus traffic goes up, so does latency and performance suddenly plummets.
3. It depends on the environment. Virtualenv just provides a consistent python software environment which can be isolated from everything else on the machine. As for other things: Look at FreeBSD's jails - that's as far as it should go. Linux has ulimit and decent security. Windows has NT which is actually damn good and provides very good process isolation with respect to memory, CPU and IO no less.
If we needed virtualization, we wouldn't have processes.