No creo que la solución esté en intervenir el gestor de ventanas, tratando de bloquear el ícono que cierra la ventana, sino en atrapar el evento desde tu código y desde allí hacer lo que deseas.
Parece que lo que necesitas es asegurarte de que el programa devuelva un valor 1 al sistema operativo cuando detecta un error, y en ese caso mi sugerencia es que agregues una línea como la siguiente, justo antes del llamado a MainLoop:
Código:
$vu_win->bind('<Destroy>', sub { exit(1) });
No estoy muy seguro de qué tan portable sea, pero esperaría que Tk maneje ese evento <Destroy> uniformemente. Si el problema persiste, cuéntanos para ver qué otras alternativas podemos usar.