yes it is you write a simple utility that will open you exe as a tfilestream seek to the end of the file and start appending data from the compressed file.There now you have an exe with the required data at the end. Now you have 2 problems 1) you do not know where the exe ned and the data file begins and 2 there is no compression component based on the tstream that will be able to read and decode from any arbitrary position in a file downwards all assume that the compression info are at the top of the stream never allowing any other variation.
to solve 1) its easy just append a int64 at the end of the file with the size of the data file now you know that the data filestarts at filesize-8-Int64Value. To solve the second whell 2 ways
1) copy the data in to a temp file and open that easy but a bit long timed depending on the size of the data file size.
2) same as before but instead of a temp file use a memorystream that is a bit faster but too much memory will be used.
3) write your own decompression that can avoid all the above problems and use it directly on the file.
There, that's the main theory behind it. some variations exist mainly on whether you will save the data files size or the exe file size and where you will save it eg at the of the file as a resource in the exe it self or as a const in the program the 3rd case requires that a patching mechanism should be written to find the const in the exe and change its value after the compilation. This is done once if the value kept is the size of the exe or every time the data file is appended if its the size of the data file.
If you need help with a specific issue of the above process fill free to ask again.