It might be worth pointing out that a Win32 executable with a single x86 instruction in it (RET), when proper header tables are used, takes up several hundred bytes. Reason being that the headers are optimised to be directly shoved into memory and used straightaway, speeding up process creation (this innovation appeared around the time of Win98, IIRC). Load-time DLL linking also takes up disk space. Packers start with a minimum (in some cases slightly non-standard) image size and performs fix ups at run-time, which from a technical standpoint is impressive.
However, whether you really need it in an era of gigabyte USB sticks and terabyte hard drives is a social matter, the trend being strongly against. I used to use a packer on all my executables, until I realised that I preferred programs to start as soon as possible. I want it now!