Summing a list of numbers is the exact kind of use case you
should use reduce for. If it feels wrong to you it's just because you have more experience with for loops than reducers.
In languages like JS that have both styles, the place you probably want to use for loops over reducers is for more complex operations where mutation can simplify the code. For example if you have 10,000 elements in an array that you want to aggregate into 1,000 properties on an object (with a non trivial relationship between array elements and object properties), it's probably going to look nicer in a for loop than it is in a reducer with a bunch of spread and ternary operators.
IMO .reduce calls should probably be one line. If not then it's time to either write a for loop or compose more smaller functions.
Avoiding them entirely is just FUD though. To compare summing an array in JS:
let sum = 0;
for (const n of numbers) {
sum += n;
}
const sum = numbers.reduce((acc, n) => acc + n, 0);
The latter is much nicer to read if you're used to both styles. What I particularly like about it is it clearly signals that 'sum' is a variable that we will be using further down. The for loop style leaves ambiguity as to whether 'sum' is going to be used later or if it's just some context for something that's happening inside the loop.
Actually, to throw a hot take in the mix here, I think people should be more accepting of multiple statements across single lines in C-style languages.
let sum = 0; for (const n of numbers) sum += n;
That would be a perfectly fine way to signal to the reader that "this is a specific line of code to produce a sum value" (much the same as the reduce example), but people seem to have a dogmatic aversion to leaving braces off if/for statements or putting multiple statements on a single line.