Supposing that the wrapper is called "compiz" and the binary is called "compiz.real", then this can be fixed be ensuring that the wrapper script ends with something like
exec -a compiz compiz.real $OPTIONS ...
This will exec the binary compiz.real, but compiz.real will run with its progname set to "compiz". That way, the session code in compiz.real will be fooled into telling the session manager to relaunch "compiz" (the wrapper) instead of "compiz.real" (the binary).
Supposing that the wrapper is called "compiz" and the binary is called "compiz.real", then this can be fixed be ensuring that the wrapper script ends with something like
exec -a compiz compiz.real $OPTIONS ...
This will exec the binary compiz.real, but compiz.real will run with its progname set to "compiz". That way, the session code in compiz.real will be fooled into telling the session manager to relaunch "compiz" (the wrapper) instead of "compiz.real" (the binary).