Quando você está desconectando fisicamente um cliente, você não está enviando uma desconexão normal (o que causaria uma reversão) e o protocolo MySQL não é muito chato, então o servidor nunca sabe que o cliente não está lá. Acho que isso é uma falha no protocolo quando comparado a outros sistemas de banco de dados onde o cliente e o servidor conversam muito mais internamente.
Qualquer maneira. Existem duas variáveis que você pode alterar. Eles basicamente fazem o mesmo, mas para clientes diferentes.
O primeiro é wait_timeout e é usado por clientes de aplicativos como java ou php.
O outro é interactive_timeout e é usado pelo cliente mysql (como em seus testes)
Em ambos os casos, o servidor encerra a conexão após alguns segundos e, ao fazê-lo, reverte todas as transações e libera todos os bloqueios.