A ver... tengo entendido que ofuscar no lo hace ningún compilador... de a lo que tengo entendido ofuscar no es nada más y nada menos que simplemente hacer el código más difícil de leer (algo muy perjudicial a la salud mental de quien tendrá que darle mantenimiento al código... Y si se recuerda cierta frase de Martin Fowler ¡mejor no digo!

).
De ofuscar se lo puede hacer en cualquier lenguaje... pero hay ciertos lenguajes crípticos que se prestan más fáciles de hacer eso.
O para decirlo más vulgarmente, ¡el código espaquetti!
De hecho, hay hasta concurso sobre ofuscamiento. Algunos están tan a divino pedo que hasta se esmeran en escribir código en forma de dibujos... a lo muy ascii-paint... formas de estrellas, coronas, corazones...
Y también se suele entender al término como añadir instrucciones "dummy" que sirven para dificultar un poco más a algún posible listillo que intente usar algún desemblador, debugger o editor hexadecimal. En este caso lo que se busca es añadir instrucciones que no aportan valor real al ejecutable pero que están para evitar o al menos dificultad que alguien pudiera reconocer algunas posibles instrucciones que se realizan... sumas y restas, intercambio de caracteres, inversión de palabras, o descomponer y recomponer numéros son algunos ejemplos que pueden servir a modo de distracción y evitar que alguien descubra algún proceso que consideremos sensible.
Como puede verse, la ofuscación esto no depende de un lenguaje... sino de habilidad de un programador.