A única coisa que você precisa fazer é bloquear o URL:
facebook.com/ajax/mercury/change_read_status.php
No Chrome, use a extensão "FB invisível" que bloqueia o URL (divulgação completa: escrevi esta extensão). Se desejar, com um pouco de trabalho, você pode usar quase qualquer bloqueador de anúncios para conseguir isso. Mas com "FB invisível", você pode "Marcar como lido" o que quiser, para poder decidir por si mesmo quando o sinalizador "Visto" estiver definido.
Uma desvantagem dessa extensão é que todas as suas mensagens também serão marcadas como não lidas, e a notificação de "mensagens não lidas" permanecerá visível enquanto você não responder (ou marcar explicitamente como lida).
Outra desvantagem: existem anúncios (que você pode desativar).
Atualização: o Facebook solicitou que eu cancelasse a extensão, pois ela viola os Termos de Serviço. Como foi desenvolvido código-fonte aberto e o código-fonte está disponível no GitHub, atualizei o link para apontar para a página do GitHub. Para não arriscar mais problemas com o Facebook, não fornecerei instruções sobre como instalar extensões manualmente e também não continuarei desenvolvendo-as. A extensão estava disponível anteriormente em https://chrome.google.com/webstore/detail/ihcedcpmfdpjijiamkaeaefgfagnnpei , você pode encontrar algumas alternativas na loja pesquisando por elas (até conseguirem usuários suficientes e também serem retiradas).