There are occasions when it is necessary to pass Lisp object references through to C and then back into Lisp again. An example of this is the need to specify Lisp arguments for a GUI action callback.
Using either the foreign type :wrapper or the macro define-foreign-converter a new foreign type can be created that wraps an extra level of conversion around the Lisp to C or C to Lisp process.