На самом деле нет способа разграничить два разных события в Javascript. Вы можете использовать подход GMail и использовать AJAX для всего, чтобы никогда не вызывать перезагрузку страницы. Это означает, что единственный раз, когда вызывается OnBeforeUnload, это когда пользователь фактически покидает страницу. Альтернативой является включение JS во все ваши ссылки, чтобы отключить сценарий OnBeforeUnload, когда они нажимают на ссылку, но вы хотите, чтобы даже срабатывал даже, когда браузер фактически закрывается.
Что касается браузера, то нет никакой разницы между пользователем, нажимающим на ссылку, чтобы перейти от вашей страницы, и нажатием кнопки закрытия браузера.