¿Por qué defun no es lo mismo que (setq <name> <lambda>)?

Estoy confundido acerca de cómo funciona la macro defun, porque

(defun x () "hello")

creará la función x, pero el símbolo x seguirá sin estar vinculado.

Si uniré algo de lambda a x, entonces x tendrá un valor, pero el intérprete no lo tratará como una función en esta forma:

(x)

Creo que está relacionado con el hecho de que defun debería definir la función en un entorno global, pero no estoy seguro de qué significa exactamente. ¿Por qué no puedo ocultarlo en el entorno actual?

¿Hay alguna forma de forzar que el intérprete trate el símbolo como función si algún lambda estuviera vinculado a él? Por ejemplo:

(setq y (lambda () "I want to be a named function"))
(y)

P.S .: Estoy usando SBCL.

Respuestas a la pregunta(2)

Su respuesta a la pregunta