Matt does a great job of explaining how he does this, I've done very similar recently and it does work well. Basically it's all down to handling the windows updates and reboot checks locally on the vm before handing back to packer by enabling winrm, it uses BoxStarter to orchestrate that piece and persist state through reboots. A fair few moving parts but a nice solution.