Read "How to develop a virtual disk for Windows
" to understand how to create a virtual drive.
Store your primary database file (Access, SQL Server CE, whatever) as part of a larger file. Also in that file, include your images and such. Allow the database to be fragmented across the file. That way, when the database grows too large for its portion of the larger file, you can just increase the size of the file and put part of the database near the end of the larger file. This will of course require you to have some sort of header (like a master file table that indicates what parts of the larger file map to individual files).
Now, load up the header information for the single file that contains all the other stuff (pictures, database, etc). Use that as the basis of your virtual hard disk. That way, you can essentially stream from your real file to the virtual hard disk. And you can point Access/SQL Server CE to that database in the virtual hard disk. When your program launches, you mount the virtual drive and when it closes, you unmount the virtual disk.
Of course, you could put it in a zip file or whatever (like you mention), but then you wouldn't be able to do the streaming scenario I explained... you'd have to unzip the database when your app runs and then rezip it when it closes, which could take considerable time.
Note that I've not tried any of this. That's just a high level description of one way to accomplish what you are trying to accomplish. Good luck.