Puxa isso soa familiar.
Eu já fui o gerente de um grupo que tinha um grande aplicativo que tinha algumas exceções não tratadas que acabaram sendo capturadas como um manipulador global de capturar tudo e exibir o mundo. Por padrão, isso é usado para permitir que o aplicativo continue em execução.
Seu ponto sobre o estado do aplicativo neste caso é o mesmo que eu fiz: o aplicativo não deve continuar em execução porque seu estado interno é desconhecido e provavelmente suspeito (afinal, uma exceção veio a ser levantada em primeiro lugar) ).
Eu queria que o aplicativo fosse modificado para que o usuário pudesse salvar os dados e, em seguida, o aplicativo fosse encerrado, sem a oportunidade de continuar. Isso foi enfrentado por uma resistência feroz, principalmente por parte de desenvolvedores que argumentaram que ela havia continuado por um longo tempo e que havia um dano mínimo - apenas muitas reclamações. No final, tive que recuar - o usuário tinha permissão para continuar, mas os diálogos eram alterados para sugerir aos usuários que eles deveriam sair e reiniciar. Eu ainda acho que isso estava errado.
No final, todas as exceções que são vistas precisam ser analisadas para encontrar a causa subjacente e as correções apropriadas, as alterações de código ou o que for necessário ser aplicado para que as exceções não ocorram - ou se elas forem capturadas como parte do fluxo normal do programa e manipulado localmente.
(Às vezes, infelizmente, as exceções são propagadas de coisas como bibliotecas. Uma das regras que me ensinaram há muito tempo atrás foi: "não confie em exceções para o fluxo normal do programa". Parece que isso não é sempre praticada regularmente mais.)
Sinto sua dor - mas, no final, o princípio é simples e você deve se ater a ele: Quando o manipulador de exceção de última chance é demitido, as coisas estão realmente doentias. O programa deve sair. Fazer o contrário dá aos usuários a impressão enganosa de que eles podem continuar trabalhando, mas internamente o programa tem um estado desconhecido ou quebrado. Continuar a trabalhar só leva a que as coisas piorem progressivamente. No final, isso se traduz em perda de satisfação do cliente. Os clientes também ficam irritados com um programa que gera uma exceção e sai - se houver um estado de programa não salvo, tente salvá-lo, talvez de uma maneira que deixe claro que o que é salvo pode não ser confiável. Pelo menos você reduz a chance de perda de dados. Mas continuando a operar ... má jogada ruim. Você tem que escolher o menor de 2 males.