I find virtual desktops helpful when working on a large single project which requires many files, webpages and applications to contribute to the final result.
For example, if I'm creating a scientific document in Latex, this is what I do:
4 desktops
1: (far left) - my working directory is open, with webpages and pdf files used for referencing
-I can drag files from my working directory to other workspaces and drop them into the relevant application from here.
2: usually an application like a spreadsheet or R (statistics) which will be involved in creating content in the document
3: graphics software (I use gimp, but I find graphics software is a bit of a hog with your workspace, so it gets one all for itself) for finishing off or creating figures
4: (far right) Latex source, terminal and output PDF for my document.
I then use alt-1,2,3,4 to flick between them and alt-` to call up my application launcher and obviously alt-tab to switch windows. That way the alt key is used for window management, the keys are in a similar place, and, visually and mentally, 1,2,3,4 represent my extended desktop.
Switching virtual desktops like this also helps with any neck strain - my neck is always facing forward and I'm not spending any time with my head at an angle.
Your use case sounds quite particular - I don't tend to have multiple projects open at the same time. If I did, I'd probably create several users and switch when I wanted to change projects. Another way might be to create a 4x4 array of workspaces with each row for a given project (if I did that I'd need to do something clever with keyboard input so I could still use alt-1,2,3,4). Using VMs sounds a bit resource-inefficient.
I personally find virtual desktops a good way of organising and compartmentalising parts of my workflow, and it solves the problems inherent when you have too many windows open on a single desktop (i.e. finding a specific window, or representing your applications on a taskbar or overview). However, it does have a cost in that it requires an extra thought process to be made when switching applications - which is whether your app is on your current workspace or another. Gnome seems to have a neat way of dealing with this, but I find their task-switcher overview, and vertically-limited workspaces to be too much of a hindrance.