O mundo do desenvolvimento de jogos é engraçado: por um lado, eles geralmente aceitam novas idéias, por outro lado, ainda estão na idade da pedra.
A verdade é que raramente há muito incentivo para mudar para .NET / Java / qualquer coisa que não seja C / C ++.
Muitas empresas de jogos licenciam partes do mecanismo de jogos de outras empresas. Essas partes são escritas em C ++ e, embora você possa ter acesso à fonte para poder portá-la, é preciso muito esforço (e, é claro, a licença precisa permitir).
Além disso, já existe muito código herdado em C ++. Se o código de projetos anteriores puder ser reutilizado (por exemplo, se você estiver escrevendo uma sequência), isso conta ainda mais a favor de continuar com o mesmo idioma, em vez de reescrevê-lo em um novo idioma (mais porque você provavelmente reintroduzirá uma tonelada de bugs que você precisará gastar tempo resolvendo.
Finalmente, é raro os jogos serem escritos em 100% C ++ de qualquer maneira - muito é feito usando linguagens de script, sejam personalizadas ou apenas integrando linguagens existentes (Lua é uma das mais populares atualmente).
No que diz respeito à coleta de lixo, isso pode ser um pouco problemático. O problema não é tanto o que existe, é mais como ele funciona - o coletor de lixo DEVE não bloquear (ou pelo menos garantir um bloqueio muito breve), pois é simplesmente inaceitável que o jogo congele por 10 segundos enquanto ele verifica toda a memória alocada para ver o que pode ser liberado. Eu sei que o Java tende a engasgar bastante no GC quando está quase ficando sem memória (e para alguns jogos por aí, isso acontecerá).
Você também é um pouco mais restrito no que pode fazer: não pode explorar completamente o hardware devido à sobrecarga do tempo de execução. Imagine o Crysis sendo escrito em Java ... mesmo que essa seja a única diferença visível, não seria a mesma (também tenho certeza de que você precisaria de um Core i7 para executá-lo.).
Isso não significa que essas linguagens não têm seu lugar no desenvolvimento de jogos - e não, não estou me referindo apenas à programação de ferramentas. Para a maioria dos jogos, você não precisa do desempenho extra que obtém do C ++, incluindo jogos em 3D, e se estiver escrevendo tudo do zero, pode fazer sentido usar algo como XNA - na verdade, há um boa chance que vai.
No que diz respeito aos jogos comerciais - o RuneScape conta? Esse pode ser o jogo Java mais bem-sucedido do mercado.