This highly depends on the guest OS and the software installed on it. If the set of software is known in advance, then you can simply create VM templates, and deploy VMs from templates on demand.
For a detailed list of required software, the guest OS will start playing a part
- For Linux you might be able to use either a kickstart setup, or a
combination of a VM template and Chef/Puppet.
- For Windows There are different ways of deploying software automatically, starting with GPO/MSI and ending with Altiris and the likes.
Either way, this is not a simple task in a small home environment, though doing some basic templating under libvirt should be easy enough.