I use virt-manager, aka Virtual Machine Manager. Using this specifically because of the winapps for Linux repo has instructions on how to get Windows apps to run through the VM to be integrated in a Linux environment.
My biggest issue with VirtualBox is that I have to install OSes as if I'm actually installing them. There aren't any images (at least that I'm aware of) that can run with a command, like deploying an EC2.
Virt-manager isn't super scriptable but the underlying libvirt can be controlled by virsh which is a shell interface to libvirt. You can use both at the same time, e.g. start and stop via virsh and access to gui container via virt-manager/virt-viewer.