I'm not sure that the presense of a stack is required for a concatenative language, but your point is well taken. Pesto5 is not enterprise ready.
With non-variadic arithmetic functions:
(defn add [x]
(cons (+ (first x) (second x)) (rest (rest x))))
Your “postfix” function can remain a simple “reduce”, but can be totally agnostic of function arity. That frees you up to write the basic combinators: (defn dup [x]
(cons (first x) x))
(defn zap [x]
(rest x))
(defn swap [x]
(cons (second x) (cons (first x) (rest (rest x)))))
(defn ap [x]
(apply (first x) (rest x)))
...http://concatenative.org/wiki/view/Om
It uses prefix notation: instead of a data stack, each function takes the remainder of the program for rewriting.