I think there is, although all I've been doing is limiting how many CPUs a VM is allowed to use. Every VM starts out with vcpus=1, and we add more when the load factor gets up too high.
This is quite effective on a server with 8 cores (two quad Xeons) and 4G of RAM, as by the time you've given each VM 512M of RAM, there's plenty of cores to go around. It would be more problematic on a single or dual core machine, though.
There are still a couple of ways a single VM can kill the box, though: it can max out the disks (so you really don't want to be running out of memory, unless you have a dedicated swap drive, so swap doesn't compete with normal disk access) and it can max out the network bandwidth.
In a hosting environment you'd probably want to set up some sort of internal traffic shaping so the each VM has a fair go at the available bandwidth, and you'd also want to keep swap partitions on a separate disk to data. This way if a couple of VMs run out of memory, they compete for the swap disk but other VMs that are within their limits and don't touch the swap disk don't see a problem.
I don't know, but I imagine you might be able to do some magic with LVM to balance disk transactions/throughput between logical volumes...