It would be theoretically possible to do it all in user-land (needing no direct kernel access), but for an arbitrary OS to work pretty much absolutely everything including the CPU would have to be emulated so it would be very very slow compared to bare metal. Think DOSBox and similar.
With changes to the guest OS it gets better: more can be done relatively native. Have a look at "user mode linux" for a good example of that There were attempts to make this work under Windows but I think those projects died pretty quickly as people just used kernel mode vitualisers instead for efficiency so there wasn't massive interest (cooperative Linux is somewhere between: it works in a similar manner to UML but requires admin access).