com certeza deve haver um bom motivo para não fazerem isso. Seja financeiro ou de tempo.
Geralmente é um pouco dos dois (afinal, "tempo é dinheiro" não é um clichê à toa).
Um cenário bem comum: o sistema atual está em constante uso e evolução, com novas funcionalidades sendo adicionadas, bugs sendo corrigidos, etc.
Para atualizar a versão, seja da linguagem, framework, o que for, vai precisar parar alguém pra testar, e se for o caso, adaptar o código. Afinal, nem sempre a versão nova é retro-compatível. Ou então tem alguma novidade que precisa mudar o código pra valer a pena a mudança. São raros os casos em que vc só troca a versão e tudo funciona magicamente (a não ser em projetos muito simples).
Enquanto alguém trabalha nesta adaptação para a nova versão, em paralelo o sistema continua existindo, com atualizações, correções, etc (que também precisarão ser adaptadas para a nova versão, o que toma mais tempo, e nesse tempo mais coisas vão sendo alteradas na versão atual, que precisarão ser atualizadas, etc).
Na prática, ou decidem que não vale a pena atualizar a versão, ou fazem algo gradual, migrando somente partes do sistema, aos poucos, até que um dia quem sabe tudo esteja atualizado (ou então convivem com o "híbrido"). Dependendo do tamanho do sistema e das condições da empresa, não tem como fazer isso "de 3 em 3 anos".
Se o sistema for pequeno, pode até valer a pena reescrever. Mas pra sistemas grandes, é inviável. Afinal, sistemas bem grandes só ficam deste tamanho após anos, então refazer tudo não é trabalho de algumas semanas ou meses. Sem contar que reescrever um sistema - qualquer sistema - não é nada trivial.
Não é incomum as empresas só decidirem mudar de versão quando a atual perde o suporte, ou se torna tão obsoleta e ruim que não vale mais a pena manter (em outras palavras, quando começa a dar prejuízo, olha aí o fator financeiro de novo). Ou quando os ganhos da nova versão são tão grandes e superiores que vale o transtorno da fase de transição - e muitas vezes é uma análise subjetiva. São raros os casos em que a empresa "para tudo" pra focar o time todo na migração.
E também tem casos em que tudo está ótimo na versão atual, mesmo que haja uma mais nova. Nem tudo precisa estar na tecnologia do ano. Eu, por exemplo, atualmente tenho projetos que estavam no Java 8 e recentemente resolveram atualizar para o 11 :-) Cada caso é um caso, e analisar o contexto é mais importante do que se deixar levar pelo hype.