Being able to run a fully hosted OS in a window is very useful. With today's multi-core CPUs and loads of RAM, it is actually possible to run a guest OS with very reasonable performance. I should mention that my current PC is dual-core, has 2GB of RAM and runs Windows XP Home edition.
Lately I'm using Sun's (Oracle's these days) VirtualBox software to accomplish that. VirtualBox works very well and is open-source. It keeps surprising me with its simplicity - all the complex things (like sharing files between the host and the guest OSes, and setting up the network on the guest OS) work easily. The most help I ever needed was quickly found in VirtualBox's own help file, without even digging in online forums and Google. That doesn't happen often!
Being completely free and open-source, VirtualBox is much friendlier than the free version of VMWare that only allows you to run "appliances" prepared in advance by other users using the full versions of VMWare. For VirtualBox I was able to trivially install an OS either from and .iso file or from an installation CD.
One of its best features is the "seamless mouse integration". This basically means that the guest OS just runs inside a window, and whenever the mouse is in that window, focus is in the guest OS. To return to the host OS, just move the mouse outside the window and click somewhere. No pesky key-combinations required.
So what am I using it for? I'm running two operating systems as guests (not all the time, of course, only when I need them).
Ubuntu 9.04
A great and friendly Linux distribution. I'm using it for all my Linux-related development which is mostly trying various tools that are too difficult to compile on Windows (I have a strong dislike for Cygwin), or testing programs I develop on Windows for portability.
I've installed Ubuntu on VirtualBox from an .iso file downloaded from the Ubuntu repository.
Windows XP
That's right, another instance of Windows XP, installed from the same Microsoft CD as the host (I suppose this is legal), running inside VirtualBox.
Why is this useful? Sometimes programs developed on Windows machines have extra dependencies (mostly DLLs) that aren't apparent on the development machine. For example, some DLL may be required by the program and is by chance present on the development box, but the user doesn't have it!
A virtual Windows XP OS is the perfect solution for testing these problems. It's a completely "virgin" installation of Windows XP, with only the network set up. When I'm creating a new version of a program and want to test its deployment, I copy it to the virtual OS. If it works there - it will work at the user's computer as well! This is very useful for executables created by Pyinstaller, that keep wanting different versions of the MSVC runtime DLLs present.
What's best about this approach is that taking "snapshots" with VirtualBox is super-simple. Say that as part of my installation process I've installed some DLLs on the guest OS, and it's no longer "a virgin". No problem - it takes me only a minute to flip back to a snapshot taken before the installation, and I have a pristine Windows box to test against, once again.