Agregar y eliminar escuchas de eventos con parámetros

Estoy escribiendo unvainilla JavaScript herramienta, que cuando está habilitada agrega detectores de eventos a cada uno de los elementos que se le pasan.

Me gustaría hacer algo como esto:

var do_something = function (obj) {
        // do something
    };

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', do_something(arr[i]));
}

Desafortunadamente esto no funciona, porque hasta donde sé,al agregar un detector de eventos, los parámetros solo pueden pasarse a funciones anónimas:

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', function (arr[i]) {
        // do something
    });
}

El problema es que necesito poder eliminar el detector de eventos cuando la herramienta está deshabilitada, pero no creo que sea posible eliminar los escuchas de eventos con funciones anónimas.

for (var i = 0; i < arr.length; i++) {
    arr[i].el.removeEventListener('click', do_something);
}

Sé que podría usar jQuery fácilmente para resolver mi problema, pero estoy tratando de minimizar las dependencias. jQuery debe sortear esto de alguna manera, ¡pero el código es un poco como una jungla!

Respuestas a la pregunta(3)

Su respuesta a la pregunta