Actually, yes you DO need to create a .ZIP file.
A self-extracting executable is nothing more than an .EXE file with a .ZIP file appended to the end of it, something like this:
C:\>COPY SelfExtractor.exe + MyZipFile.zip SelfExtractingZip.exe
You need to write your self extractor to look at the file it was launched from and search for the .ZIP header in that file. From there it's your own implementation of unpacking the archive based on a stream that you open and seek to the beginning of the .ZIP file portion of your .EXE.