Have a look through Torry and The Delphi Super Page. A quick browse found heaps of zip components, many of which are freeware.

Alternatively, simply pack the file yourself using lots of blockreads/blockwrites. You'd have a helper application that stored all the files you packed together in a table. You would do this:

1) create a new file
2) empty out the table
3) for each file in dir...
3.1) add file name, size to table
3.2) blockwrite the file to the packed file
4) write out the header once done to the end
5) write out the size of the header

Then, when reading in the file, you would see to the end of the file minus however-many-bits for the size of the header (e.g. four 4 bytes for an integer size). You'd then allocate that amount of space for a new header and would seek back to the header start in the file.

Once you have the header, you can get the name/offset of any file in there.

Uh, the above is from the top of my head and may not work correctly. I'll do a working demo of it when I get back home.

There's also a tutorial over at http://epicboy.flipcode.com/ describing how to use zip files to combine stuff but with no compression - what you want, but it's in C++.