From what I understand, it's something that 'packs' an application, either to preserve space or to obfuscate it (making it a little bit harder to reverse engineer it since you have to peek at the extracted contents in the memory instead of at the file contents).
So when you would run a packed application, there application would essentially start to unpack an encrypted/compressed blob of memory, and then jump to it once it's unpacked.
Think of it of decompression software bundled along with a compressed version of the program you actually want to run. So execution starts in the uncompression part, it unzips all the code into memory, and then starts running the program you actually cared about.