I don't have a running image handy, but
(+) ; => 0
(*) ; => 1
and (+ n) ; => n
(* n) ; => n
which I expect has some bearing on the behavior of reduce in the examples given.It's pretty obvious that any other function could either have or be advised to have whatever equivalent semantics are appropriate.
Of course
(apply #'+ '(1 2 3 4 5)) ; => 15
So reduce can be obviated by just letting the function take variable args too.