En realidad estás capturando la excepción (try..except), pero luego la estás "lanzando" de nuevo al utilizar:
Código Delphi
[-]
raise eCamposNoValido.Create('');
Con ésto lo que estás haciendo es volver a lanzarla; Lo lógico aquí sería guardar valor, sacar un mensaje,... pero si vuelves a hacer el raise, la excepción sigue, llega al bucle y como ahí no hay Try..except que la capture, pues se para (como tú dices).
¿Exactamente qué quieres hacer cuando se produzca una excepción (antes de continuar con el bucle)?