+1 to simplifying and just dealing with cursors for now.

You can probably simplify domain notes of when pre-start
and post-end are valid by stating that, outside of the general
"String Cursors" section, pre-start is never valid, and post-end
is only valid as an end argument.

string-cursor-ref and string-ref/cursor are redundant.

The string-split/cursors signature

  (string-split/cursors string [separator [ limit ] ] start end)

suggests start/end are always required, but sep/limit are
optional.  Anything other than

  (string-split/cursors string [separator [ limit [ start [ end ]]]])

would be confusing.

Splitting on predicate is useful and in my experience more
common than substring.  The opposite (tokenizing) and
both operations together (partitioning) can also be useful.

string-pad-both/cursors is well defined and useful for centering.

string-compress/cursors is a surprising name, since it has
nothing to do with general compression.  There's no ambiguity
in string-remove-consecutive-duplicate-chars/cursors, but if you
want brevity then "collapse" or even "squash" may be better than
"compress".

I think the missing string searching and string-join are essential.

Other useful procedures: prefix?/suffix?/mismatch, string-chop
(chop into fixed-length chunks), string-replicate (xsubstring),
string-replace (from/to substrings), string-translate (from/to chars).

-- 
Alex