Persze, megoldható. Az onbeforeunload eseménykezelőjében egyből visszatérsz, ha bizonyos feltételek nem teljesülnek. A példában null-lal tértem vissza, de az implicit undefined-dal való visszatérés is jó lenne, számomra ez így egyértelműbb, és működik az összes népszerű böngészőben, IE9-től kezdve legalábbis biztosan. Ha az egész megerősítős mókát csak akkor szeretnéd aktiválni, ha be van jelentkezve a felhasználó, akkor először is megvizsgálod, hogy be van-e jelentkezve, és ha igen, csak akkor iratkozol fel eseménykezelővel az onbeforeunload eseményre - vagy magában az eseménykezelőben is vizsgálhatod a feltételt, ez egyéni döntés kérdése.
Jelen esetben a document.activeElementnek vizsgáltam a tagname attribútumát, hogy amennyiben az egy <a> tag, akkor anchorró/linkről van szó, arra kattintva váltódott ki az esemény. Emlékeim szerint ez ilyen esetben simán megfelelő lehet.
Itt a demo:
https://jsfiddle.net/9eb5p6o6/1/