Есть класс, в методе show подписываюсь на node элемент:
this.overlay.addEventListener('click', this.hide.bind(this));
В методе hide отписываюсь:
this.overlay.removeEventListener('click', this.hide.bind(this));
Но через хромовский devtools если смотреть, то на node все равно весит обработчик на клик.