А что такое wrap? Это переменная? В общем, не знаю, заменил на document, т. к. в примере такого нет. Если у тебя так работает, то оставь.
Функцию добавлять не надо. Я всего лишь
1) Убрал removeEventListener, потому что событие должно считываться всегда, а не удалятся.
2) Заменил add на toggle, чтобы класс переключался.
3) Добавил условие else, чтобы блок прятался обратно.
Собственно, всё.
https://jsfiddle.net/8fo6s7at/
wrap.addEventListener('click', function _tmp(e) {
let block = e.target.closest('.block');
if( !block ) return; // return прервет функцию, если кликнули не на нужный блок.
block.classList.add('clicked');
if( document.querySelectorAll('.block.clicked').length === 3 ) {
// .block.clicked без пробела: Все элементы, у которых есть оба класса
document.getElementById('hidden').style.display = "block";
wrap.removeEventListener('click', _tmp);
// После завершения, обработчик клика удаляется.
}
});