How is HTTP Keep Alive implemented?
To put it simply, the HTTP server doesn‘t close the TCP connection after each response but waits some time if some other HTTP request will come over it too. After some timeout it closes it anyway.
Does it internally use TCP Keep Alive?
No, at least I see no point in it.
If not, how does the server detect if the client is dead or alive?
It doesn‘t - it doesn‘t need to. If a client sends a request, it will get the response. If the client doesn‘t send anything over TCP connection (maybe because the connection is dead) then a timeout will close the connection; client will of course notice this and will send request through another TCP connection if needed.