Preferir por um ou outro não é tão simples assim. A menos que você fale apenas de gosto pessoal. Para cada projeto você precisa avaliar os pós e contras em usar uma ou outra arquitetura.
Projetos desktop podem ser escaláveis e distribuídos como web. Se você escrever, por exemplo, uma agenda em swing você pode usar Java Web Start. Assim você recebe atualizações automaticas, não precisa ter a aplicação instalada e se sua agenda precisar você pode conectar em um módulo EJB remoto, acessar um webservice e tudo mais que você ter em mente. Uma aplicação web também pode fazer o mesmo.
Isso você pode também ter na web. Hoje com as diversas técnicas de CSS e Javascript você pode fazer tudo que uma aplicação desktop faz. Até mesmo preparar o layout para impressão você faz no CSS. Eu tenho um projeto web que até manda imprimir em uma impressora dessas termicas.
O Vini já falou muito bem sobre isso. Mas tudo depende do que você tem. E confirmo: é sempre ideal mesmo que você tenha uma aplicação desktop deixar o processamento maior no servidor e o cliente apenas com as views. Regras de negócio e processamento pesado ficam no servidor, até porque conforme a aplicação for crescendo você pode ir escalando seu hardware conforme a necessidade. Claro, isso vale para aplicações mais complexas. Você não precisa ter uma calculadora remota, né? 
Vide meu primeiro item. O swing pode ser tão amigável quando um sistema web. E o contrário, ambos podem ser muito chatos para o usuário se for mal feito. Não vejo diferença em ser web ou desktop nesse sentido.
Aqui você pode usar o Java Web Start. Assim você tem uma aplicação desktop que sincroniza pela web para auto-atualizar.
Ué, não entendi. Java só não é portável se você usar coisas dependentes do SO, por exemplo, c:\foo\bar ao invés de /foo/bar. Ou um load-library…
Sim, nesse ponto eu concordo. Fazer um JSP com um CSS é relativamente mais simples que swing. Embora há editores visuais muito bons.
Isso você pode fazer com o Java Web Start. Como já falei, o comportamento é o mesmo entre ambos (web e desktop).
Mas se sobrecarregar você pode ir escalando conforme houver necessidade. Aliás se você deixar um cliente magro e servidor robusto você tem uma economia de hardware necessário para rodar a aplicação no cliente, investindo apenas no servidor. A economia é que você precisará escalonar apenas o servidor caso a aplicação aumentar. Imagine você trocar todo o hardware de uma empresa de 500 clientes? É mais vantagem você ter 10G de memória no servidor do que 1G em 10 maquinas. Até porque se um cliente exigir mais você terá falta de recursos em um cliente e sobra de recursos em outro.
Finalizando, muito bom seu post. Acho que dá para ter uma excelente discução sobre o assunto. E pela experiência que tenho já tanto em aplicações desktop e web, você pode fazer tudo que precisa em qualquer uma delas. Basta um pouco de conhecimento das APIs e criatividade (sem gambiarras claro).
Abraços