It should be noted that a classic packer is different, and has a different purpose usually, than OS-level file system compression.
The way packers work (or at least did last time I wrote one) is to take an executable, and basically encode the entire thing in some fashion (whether compressed, encrypted or both) and then put a "wrapper" executable around that which knows how to decompress the real executable.
I've never dealt with one on any version of Windows, my experience was all back in the DOS days (and the C64 days before that). There, it was pretty easy to do... once you compressed the real executable, your "decompaction" routine would just reverse the process and place the real executable into memory at an appropriate location (like DecompactionRoutineLength+1) and jump to the first instruction. I'm not sure how you do the same thing with a Windows PE, be it desktop or not, but the theory has to be essentially the same.
File system compression on the other hand... wait, it actually is the SAME THING, its just that the decompaction routine is built into the OS. As well as the compaction routine, and both are done on-the-fly.
Still, usually different goals though. Classic compactors were more about obfuscation than space saving.

...and so I said to Mr. Gates: "$640 billion should be enough for anyone!"