Resumindo: é possível ocultar qual idioma você está usando no back-end. Exemplo trivial: considere uma página "Hello World"; seria extremamente difícil descobrir qual estrutura / idioma estava sendo usado no back-end (assumindo que coisas básicas, como cookies de sessão, sejam configuradas manualmente ou não estejam em uso).
No entanto, o objetivo das estruturas é poupar a necessidade de reimplementar a funcionalidade e fazer com que você trabalhe de maneira padronizada. Quase todas as estruturas têm seus pequenos avisadores específicos que os revelam, se você parecer bem próximo. Como outros já apontaram, é possível tentar ocultá-los usando a configuração ou reimplementando vários recursos padrão. No entanto, eu diria que, para sites grandes, seria extremamente difícil ocultar tudo completamente e, mesmo se você conseguisse isso, usaria muito pouco de sua estrutura.
Em resumo, eu diria que quase sempre é possível ter uma idéia muito boa do que está sendo usado por baixo (com alguns exames e estímulos). Ocultar a estrutura usada é possível, mas rapidamente se torna inviável para sites grandes.
As respostas anteriores têm alguns bons exemplos de vários avisadores que estruturas e idiomas possuem. Gostaria de acrescentar que vários mecanismos de exibição têm um comportamento específico relacionado ao espaço em branco que pode ser usado para identificá-los. O mecanismo Razor usado no MVC3 + possui algumas peculiaridades bastante específicas que podem ser usadas para identificá-lo ou, pelo menos, restringir a lista de suspeitos (novamente, você pode dar um passo adiante, mas depois está usando?).
.php
um script CGI escrito em C ou um servlet escrito em Java.