For dynamic disks, growing is a "have to" or else it would kill the idea of dynamic disks.
Shrinking on the other hand is something you would do ad-hoc, only if you need it / want to reclaim disk space on your host, not something you would expect to happen automatically (would be counter productive).
Side notes :
-One can also expand the size (ad hoc) for a dynamic OR fixed VHD.
In the case of a fixed VHD expanding, you would need to extend your volume as well (at the OS level).
-One can also shrink a volume (at the OS level) and later "cut" the fixed VHD file : tricky but doable (done it before).
So even with a fixed VHD disk, there are ways to shrink it.
-Compacting VHD only works if you truely cleanup your volume : some defragmenters will do it - I personally prefer to zero all unused clusters to reclaim 100% of the free/unused volume space.
In most cases, if you "only" delete a bunch of stuff in your VHD, compacting it will actually have no effect.
So, compacting VHD is not something straighforward.
I hope I used the word "volume" correctly
Edit
About "writing in theory a tool" that does compact VHD's, doing some free publicity for myself there : vmount does such things