My teams have had good experiences with both Virtual PC and VMWare. On the positive side, we were able to configure the Virtual Machine EXACTLY as we needed. Once you have an established Virtual Machine but before you do any development, save that file to a different location. If anyone on the team needs to do a "restart", you have an image that you know works as intended. You can also use it to clone as many VMs as you need.
Once you're ready to send the VM file to your consultant, there are a few ways to get it to them. Some teams post the file to a public site and sent a link to download it. My team ran into issues and concerns with this (it was a large file and the concerns were around securing the link so only authorized persons could download it), so we put it on a flash drive and sent it by certified mail.
A few considerations.
First is Source Control. Since you said your consultants won't be able to establish a VPN connection, you will need to design your project and assign tasks in a way that means there is NO overlap between your work and their. Establish your contracts (Interfaces, Services, etc) as early as possibly and Breaking Changes to the contracts is an Event that gets communicated to the whole team.
Second, it also means that the full burden of integration testing falls on your in-house developers shoulders. I recommend doing that early and often, because once the contract is up with the consultants, you cannot rely on being able to contact them again.
Third is Licensing. The Virtual Machine is another machine as far as your vendors are concerned. Some vendors account for this and other's don't, so you'll need to check the licensing on each component. This includes the Operating System, Database, Libraries, IDE, etc.
Fourth is Computer Names. Each Virtual Machine is treated as a machine on the network as well. If you clone the VM image, each one will have the same machine name and will confuse the network. In our case, the router thought it was under a DDoS attack and shut itself down. Each VM solution has its own way of resolving this, so I'll stop there. This will affect your in-house developers more than the offsite folks.