guarda sulle swing hai pienamente ragione, se non altro perché parte delle swing è gestita nativamente (ecco perché quando isoli pezzi di codice hai prestazioni migliori).
Tolta l'interfaccia grafica (che non tutti hanno bisogno di usare) non puoi negare che è abbastanza semplice scrivere codice che puoi eseguire su macchine con architetture differenti (prova a manutenere codice scritto in C per diverse piattaforme, ogni volta che devo fare una modifica mi viene da piangere).
La mia scelta: non creo l'eseguibile, creo uno script di lancio.
L'altra scelta è se presupporre la presenza o meno della jvm sulla macchina: NO quando devo essere sicuro che determinate features siano presenti. Mi è anche successo che aggiornamenti sul pc di utenti della jvm creassero casini, preferirei controllare meglio quelle parti imponendo la mia jvm.