I'd rather not document lvar/lvar?. They are not really meant to be used directly. The docstring of lcons should be changed to say that it constructs a sequence a with an improper tail if d is a logic variable. llist should read similarly.

unify should probably say "a goal which attempts to unify u and v". Goals do not return "successful" or "failed" goals. They themselves either succeed or fail.

For exist we should probably rename x-rest to lvars and g-rest to goals. In run rename rest to goals, ditto for run*.

There is no difference between "relation" and "goal". conso is the relational counterpart to cons - it is most definitely a goal. It will either fail or succeed based on other elements in a particular miniKanren program.