Okay so to answer my question with the input from the above comments...
Symbols are not pointers, but can sort of be used like pointers.
The specific answer of how to get at the 42 is to use
(eval y)
or in guile (which is what I'm working with)
(eval y (interaction-environment))
see @ex nihilo's comment for why this works.
I found the guile version at How do I evaluate a symbol returned from a function in Scheme?
What symbols are is entries in the symbol table. A variable (itself an entry in the symbol table) which is bound to a symbol thus refers to another entry in the symbol table (analagous to pointers in this regard). However the referred to symbol need not exist at the time it is bound to the variable, but may be defined later because the linkage is not resolved until the symbol is evaluated. Thus
scheme@(guile-user)> (define z 'r)
scheme@(guile-user)> z
$1 = r
scheme@(guile-user)> (eval z (interaction-environment))
ERROR: In procedure memoize-variable-access!:
ERROR: Unbound variable: r
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]> ,q
scheme@(guile-user)> (define r #t)
scheme@(guile-user)> (eval z (interaction-environment))
$2 = #t
Not sure what I would ever use the later fact for but interesting none the less.
Thank you to all who helped me wrap my head around this one.