Vou começar dizendo que sou um grande fã de GWT, mas sim, existem muitas armadilhas, mas a maioria, se não todas, fomos capazes de superar:
Problema: Os longos tempos de compilação, à medida que o projeto cresce, aumentam a quantidade de tempo necessária para compilá-lo. Ouvi relatos de compilações de 20 minutos, mas as minhas são em média cerca de 1 minuto.
Solução: divida seu código em módulos separados e diga ao ant para construí-lo somente quando for alterado. Além disso, durante o desenvolvimento, você pode acelerar enormemente os tempos de compilação criando apenas um navegador. Você pode fazer isso colocando isso no seu arquivo .gwt.xml:
<set-property name="user.agent" value="gecko1_8" />
Onde gecko1_8 é o Firefox 2+, ie6 é o IE etc.
Problema: o modo hospedado é muito lento (pelo menos no OS X) e não chega nem perto de corresponder às alterações 'ao vivo' que você recebe quando edita coisas como páginas JSPs ou Rails e pressiona a atualização no navegador.
Solução: você pode fornecer mais memória ao modo hospedado (geralmente recebo 512M), mas ainda assim é lento. Descobri que, quando você fica bom o suficiente com o GWT, para de usá-lo. Você faz uma grande parte das alterações, compila para apenas um navegador (geralmente 20s de compilação) e depois clica em Atualizar no seu navegador.
Atualização: Com o GWT 2.0+, isso não é mais um problema, porque você usa o novo 'Modo de Desenvolvimento'. Basicamente, significa que você pode executar o código diretamente no navegador de sua escolha, sem perda de velocidade, além de poder fazer firebug / inspecioná-lo etc.
http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM
Problema: o código GWT é java e tem uma mentalidade diferente de criar uma página HTML, o que torna mais difícil pegar um design HTML e transformá-lo em GWT
Solução: Mais uma vez, você se acostuma a isso, mas, infelizmente, converter um design HTML em um design GWT sempre será mais lento do que fazer algo como converter um design HTML em uma página JSP.
Problema: o GWT exige um pouco de atenção e ainda não é popular. Isso significa que a maioria dos desenvolvedores que ingressam na sua equipe ou mantêm seu código precisará aprender do zero
Solução: Resta ver se o GWT decolará, mas se você é uma empresa que controla quem contrata, sempre poderá escolher pessoas que conheçam o GWT ou queiram aprender.
Problema: o GWT é uma marreta, comparado a algo como jquery ou javascript simples. É preciso muito mais configuração para que isso aconteça do que apenas incluir um arquivo JS.
Solução: use bibliotecas como jquery para tarefas menores e simples, adequadas a elas. Use o GWT quando desejar criar algo verdadeiramente complexo no AJAX ou quando precisar passar seus dados para frente e para trás através do mecanismo RPC.
Problema: Às vezes, para preencher sua página do GWT, você precisa fazer uma chamada de servidor quando a página carregar pela primeira vez. Pode ser irritante para o usuário ficar sentado e assistir a um símbolo de carregamento enquanto busca os dados necessários.
Solução: no caso de uma página JSP, sua página já foi renderizada pelo servidor antes de se tornar HTML, para que você possa efetivamente fazer todas as suas chamadas GWT e carregá-las previamente na página, para um carregamento instantâneo. Veja aqui para detalhes:
Acelere o carregamento da página pré-serializando suas chamadas GWT
Eu nunca tive problemas em CSS estilizando meus widgets, prontos para uso, personalizados ou não, então não sei o que você quer dizer com isso ser uma armadilha?
Quanto ao desempenho, sempre achei que uma vez que o código GWT compilado é rápido, e as chamadas AJAX são quase sempre menores do que a atualização de uma página inteira, mas isso não é exclusivo do GWT, apesar dos pacotes RPC nativos que você obtém se usar um back-end JAVA é bastante compacto.