I kind of feel stupid because I found an answer while trying to circumvent the usage of VHD files on Linux. Cloning the disk to the VDI format (after runing sdelete on the Windows guest) also shrinks it to the smallest size:
vboxmanage clonemedium INPUT.VHD OUTPUT.VDI --format VDI --variant standard
It also works from VHD to VHD
vboxmanage clonemedium INPUT.VHD OUTPUT.VDI --format VDI --variant standard
This solutions is not as efficient as "compacting" because you need extra storage to store a second copy of the virtual disk and after the process has finished you need to swap the files.