I do something like that with Ansible. We power up the VM, connect to the OS and do our configuration management, power it off and snapshot it. For packages, I use Chocolatey for common software(Ansible has a module for it). For custom stuff I have Ansbile install the msi from a file share that I supply the switches or I package it myself with Silent Install Builder
Ansible also has a module for windows updates.
I don't deploy from an image but if I had to I could just use the Ansible VMware modules to pull from template.