I wouldn't want to set up a production network's server like that, for sure, but if you're happy with it as a home 'test' box then go for it, frankly..
As for installing apps on a DC being "wrong" - it's a balancing act, balancing the obvious cost of multiple servers against availability, ease of support and workload.
workload
This is the easy one. The more apps you put on one box, whether virtualised or not, the more work that box has to do, and there comes a point where it will struggle to keep up with all the work you're asking it to do. This can result in slowdowns and possibly errors (e.g. where a component 'times out'.)
Ease of support
Also quite easy. And somewhat negated by virtualisation if that is used well. The more systems you have on one box, the more chances there are for components from different services to interact in unexpected ways and require more work on your part to keep them working.
Availability
Again, somewhat negated by virtualisation if that is used well. This simply means that if you're providing a service to customers/users on a network then any interruption of service to those customers is a bad thing. That's obvious of course. However...
If multiple applications share the same box then any downtime on that box affects all those services. More, if two or more services exist in the same system then an interruption to one means and interruption to the other - e.g. if all your systems were running without virtualisation then a SQL server patch that required a reboot would stop all the other services running, some of them (e.g. AD, DNS) needlessly.
Of course, you're using virtualisation but if you have a physical Windows 2008 server with the hyperV role installed (as opposed to an actual hyperV server) and installed one of those services on the physical server alongside HyperV, then this means that any patch to that service that requires a reboot (or any other interruption of a service/resource needed for the virtualisation role) would result in a needless interruption of service/availability.
These are the three reasons I know of for minimising the amount of applications on one (real or physical) server instance.