Acabei bolando uma solução alternativa da do professor que produz os mesmos resultados:
const controle = document.querySelectorAll("[data-controle]");
controle.forEach((elemento) => {
    elemento.addEventListener ("click", (evento) => {
        let operacao = evento.target.dataset.controle;
        let atributo = evento.target.parentElement.querySelector('[data-contador]');
        manipulaDados(operacao, atributo);
    });
});
function manipulaDados(operacao, atributo) {
    if(operacao === "-") {
        atributo.value--;
    } else {
        atributo.value++;
    }
}
Eu queria deixar a definição dos parâmetros toda fora da função manipulaDados.
Há alguma desvantagem em estruturar o código dessa maneira?
 
            