This sounds like a place where a doubly-linked list could do the job. Each node knows the previous and the next node, thus you can easily descend/ascend the list whenever you need.
-- seek $her, $from, $everywhere if exists $true{love};
If you have several branches and many $roots in the tree then of course the $root needs to know that it is the $root. A simple flag would tell the search to stop and return the $root for a particular $node.
-- seek $her, $from, $everywhere if exists $true{love};