Na verdade, há um retrocesso no mundo do .NET contra essas mesmas coisas que você mencionou. No primeiro exemplo fornecido, no entanto, o mecanismo de roteamento recebe uma convenção para mapear a rota padrão. O próprio fato de as rotas serem dinâmicas torna quase impossível usar uma configuração estática.
Você também mencionou o XAML / WPF, ambos os quais estavam em desenvolvimento bem antes dos genéricos serem introduzidos no .NET e voltar a dar suporte aos genéricos atrasaria ainda mais um produto já muito atrasado (Longhorn / Vista).
Existem exemplos dentro da estrutura ASP.NET MVC de uso de expressões lambda no lugar de strings mágicas e o Entity Framework / LINQ o leva ainda mais longe, onde o idioma e a estrutura fornecem suporte nativo para compor consultas SQL em um gráfico de objeto estático ( em vez de construir seqüências de caracteres mágicas de SQL, você obtém validação de tempo de compilação de suas consultas).
Para outros exemplos de configuração estática, consulte o mapa de estrutura e outros contêineres de injeção de dependência modernos e outras estruturas que precisam inspecionar o gráfico de objeto no tempo de execução, mas permitir que o desenvolvedor forneça sugestões estaticamente usando expressões lambda.
Portanto, a resposta curta é que, historicamente, o .NET não suportava a passagem estática de um gráfico de objetos até a versão 3.5. Agora que temos, muitos desenvolvedores preferem as strings mágicas e muitos têm pressionado por um suporte ainda mais profundo, como um operador symbolOf que funciona de maneira semelhante ao operador typeOf.