Existen varios métodos para hacer ésto.
1) Usar un binder.
Un binder es un programa que incrusta un ejecutable dentro de otro, de modo que al ejecutar el primero se ejecuta también el segundo. Algunos incluso permiten ejecución asincrónica, por ejemplo Yab. (Yab: Yet Another Binder)
La desventaja: Los ejecutables creados así son detectados como virus por muchos antivirus, puesto que a fin de cuentas es una forma de ocultar un ejecutable dentro de otro.
2) Incrustarlo a mano.
No es difícil. Todo lo hace el mismo fichero. Imaginemos que programamos algo en VB, el ejecutable final sería:
fichero.exe:
[inicio fichero] [datos del exe] [fin de fichero]
Lo modificamos añadiéndole una serie de datos que consideremos precisos al final.
fichero.exe:
[inicio fichero] [datos del exe] [otros datos] [fin de fichero]
En nuestro código fuente, leemos el propio exe, si tiene más datos al final de los necesarios, entonces es cuando descomprime. Estos datos podrían usar algún tipo de compresión, por ejemplo Huffman o Zlib.
3) Explotar un bug de windows (no recomendado):
echo "Hola" > fichero.txt
type C:\Windows\notepad.exe > fichero.txt:prueba.exe
start C:\ruta\fichero.txt:prueba.exe
4) Un zip o rar autoextraíble. O un instalador, tipo Inno Setup, pero no tienes la flexibilidad que te da hacerte tu propio fichero y decidir tú cuando extraer, añadir etc.
En mi opinión la mejor opción es embeber a mano el ejecutable dentro de otro y usar delimitadores que definan cuales son sus dimensiones para extraerlo después a voluntad.