Quando si sta disconnettendo fisicamente un client non si invia una normale disconnessione (che avrebbe causato un rollback) e il protocollo MySQL non è molto loquace, quindi il server non sa mai che il client non è presente. Penso che questo sia un difetto nel protocollo rispetto ad altri sistemi di database in cui il client e il server parlano molto di più internamente.
Comunque. Ci sono due variabili che potresti cambiare. Fondamentalmente fanno lo stesso ma per clienti diversi.
Il primo è wait_timeout ed è utilizzato da client di applicazioni come java o php.
L'altro è interactive_timeout ed è usato dal client mysql (come nei tuoi test)
In entrambi i casi il server per terminare la connessione dopo un certo numero di secondi e in tal caso esegue il rollback di tutte le transazioni e rilascia tutti i blocchi.