Retocar sin restricciones no es posible, ni con Java ni con nada
. Lo puedes dividir en .war pero luego añadele que seguramente tendras dependencias entre modulos, usaran clases comunes etc. y cuando cambies eso, tendras que reiniciar todos los modulos. Aparte de que eso es un trabajo extra para mantener todos los .war "sincronizados", todas las aplicaciones compartiendo recursos... En la mayoria de casos no merece la pena.
Lo habitual es "minimizar" los elementos que obliguen a recargar el contexto (por ejemplo no usar elementos compilados para las cosas que mas cambian) y hacer paradas planificadas para cuando haya que recargar.
Y para que las paradas sean menos traumaticas, lo que he visto usar son clusters de aplicaciones o aplicaciones en paralelo detras de un proxy, donde tu pones una copia de la aplicacion en marcha, rediriges el trafico a la copia, despues paras la aplicacion, haces los cambios, las pones en marcha y luego rediriges el trafico hacia la nueva otra vez. Dependiendo de lo que guardes en sesion etc. puede que tengas que ponerlas en cluster o no...
Pero vamos, el mismo Apache hay que rebotarlo cuando añades una libreria nueva, por ejemplo, lo que pasa es que arranca mas rapido
.