The key for me is that a REPL reads, then evaluates (generally involving printing), then starts over (looping). Bash for example fits this criteria. I'm as much of a fan of lisp as anyone, but it doesn't need to be literally printing the result of `eval` to be a REPL in my eyes.
If you enter it at a Lisp REPL, the REPL will read the expression, evaluate it and store it as a function. The result value is the name of the defined function. The REPL will then print the result, here the name of the function: ADD.
CL-USER 13 > (defun add (a b)
(+ a b))
ADD
As you can see, the function does not print the Lisp symbol 'ADD', it's printed by the REPL. That's the P-component of R E P L, REPL. P stands for PRINT. This means that the REPL will always print a result - unless a Lisp function does not have a result - which is rare.
If we execute the function, the REPL prints the result of the function: