A resposta já está contida na sua pergunta. Quando um terminal é desconectado, o kernel envia SIGHUP para o processo de controle do terminal¹. Para um terminal criado por um driver no kernel, o terminal é desconectado quando o driver diz isso. Para um terminal pseudo-terminal, o terminal é desconectado quando o identificador do arquivo para o lado mestre do terminal é fechado (seja porque o processo do emulador de terminal o fechou explicitamente ou porque o processo do emulador de terminal morreu) ³.
¹ O processo de controle é o processo executado primeiro no terminal - mais precisamente, é o primeiro processo que abriu o terminal enquanto era líder de sessão ou tornou-se um líder de sessão ao ter o terminal aberto, se esse processo ainda é um líder de sessão.
² O lado mestre é o lado do emulador. O lado escravo é o lado do aplicativo em execução no terminal.
³ Se mais de um processo tiver o lado mestre do terminal aberto, todos eles devem fechar seus descritores de arquivo (possivelmente morrendo), para que o descritor de arquivo seja fechado.