The only thing you need to do is block the URL: facebook.com/ajax/mercury/change_read_status.php
For Chrome, use the extension FB Unseen which blocks the URL (full disclosure: I wrote this extension). If you want, with a little work you can use almost any adblocker to achieve this. But with FB Unseen you can "mark as read" whatever you want, so you can decide for yourself when the "Seen" flag is set. One drawback of this extension is that all your messages will be marked as unread for yourself, too, and the "unread messages" notification stays visible as long as you do not reply (or explicitly mark it as read). Another drawback: there are ads (which you can disable).