Aqui na empresa temos uma situação muito semelhante: precisamos migrar os sistemas de JSF 1.1 para alguma tecnologia mais moderna.
A equipe responsável por isso já fez protótipos com Wicket, Vaadin e JSF 2 com Prime Faces. Ninguém ousou tentar o GWT ainda, mas é uma opção interessante. Para desenvolvimento ágil, há o “play! framework”, mas só recomendo se a equipe de desenvolvimento for de alto nível.
A princípio, JSF 2 parece ser o caminho natural, mas aqui houve um grande impasse. Nos testes dessa equipe, foi identificado que há diferenças significativas entre o JSF 1 e 2 a ponto de várias coisas não funcionarem como esperado. Temos tantas telas em JSF 1 e o esforço de homologar tudo novamente está gerando um certo impedimento para a migração. É um ponto que deve ser levado em consideração, pois dependendo de como está a implementação atual, a migração para JSF 2 não será tão suave.
Ninguém conseguiu também criar um sistema híbrido, com uma parte em JSF 1 e outra com JSF 2, por causa de incompatibilidade entre jars. Dessa forma a migração poderia acontecer gradualmente. Com outras tecnologias isso provavelmente é possível, já que não haverá sobreposição de classes. Uma possível solução para migração gradual de JSF 1 para 2 seria dividir o sistema em 2 e usar Single Sign On para que o usuário não perceba que está usando duas aplicações diferentes.
Eu, particularmente, não gosto de JSF por vários motivos.
Recentemente desenvolvi um sistema usando FreeMarker (linguagem para templates) e Bootstrap Twitter (biblioteca html/css/javascript que provê componentes HTML) desvinculando totalmente as tecnologias utilizadas nas camadas de Visão e Apresentação. Gostei dessa solução embora perca algumas das vantagens de se usar um framework mais popular.