Не срабатывает removeEventListener?
removeEventListener не сработает, если не передавать точно ту же функцию, которую передали в addEventListener. Я лично столкнулся с таким однажды, когда думал, что fn.bind(ctx) возвращает один и тот же объект каждый раз, а оказалось, что нет. То есть: fn.bind(ctx) !== fn.bind(ctx). Возможно, это ваш кейс, т.к. Menu.prototype.toggleTag явно должен исполняться в определенном контексте, но точнее сказать невозожно, так как почти вся эта приведенная простыня не имеет к проблеме никакого отношения. Покажите минимально неработающий пример, если хотите помощи.
Не стоит вешать обрработчики и снимать их потом используя анонимные функции
outputExistTags: function(msg, callback) {
.............some code.................
***********************************
for (var i = 0; i < tagsId.length; i++) {
            var itemList = document.querySelector('[data-target="' + tagsId[i] + '"]');
            itemList.removeEventListener('click', callback);
            itemList.classList.add('tvz-disable');
            console.log(itemList);
        }
}
}
Вы же передаёте анонимную функцию, у вашего обработчика совсем другой callback
Можно складировать callback'и связывая с типами событиями