Ну так querySelector возвращает один элемент. Надо использовать querySelectorAll:
document.querySelectorAll('.number').forEach(function(n) {
const top = n.getBoundingClientRect().top;
const end = +n.dataset.max;
window.addEventListener('scroll', function onScroll() {
if (window.pageYOffset > top - window.innerHeight / 2) {
this.removeEventListener('scroll', onScroll);
let start = +n.innerHTML;
const interval = setInterval(function() {
n.innerHTML = ++start;
if (start === end) {
clearInterval(interval);
}
}, 5);
}
});
});