in reply to
How to best pass on the context / wantarray?
Rather than relying on (possibly subtle) context or having two versions of each method, you might want to have the copy method and the mutator method and call them both when you want a modified copy. That seems the most clear (and flexible) to me. The overhead is not particularly onerous.
$cursor->move_right(3); # move cursor three chars to the right
$cursor->move_down(); # move cursor one line downwards
my $left_pos = $cursor->copy->move_left(1);
# position one char to the left of the cursor
my $start = $cursor->copy->start_of_document();
Caution: Contents may have been coded under pressure.