I'm assuming that on a hypothetical word-wrap mode, we show on gutter just a line number for all the paragraphs (like Notepad++ do).
And we maintain the same storage for lines, using a TStrings list like SynEdit currently do. The difference would be now, that "one line" (one entry of Lines[] ), can be visualized on more than one visible "lines". That means that we really storage "paragraphs".
Then when we set a Bookmark, it must save something like Line=5000, Column=200. So, when jumping, we jump quickly to paragraph 5000 (in fact Lines[5000]), and then we must find the real "visible line" that match the column 200 (just breaking the paragraph 5000) [1].
What I propose is just using an approximate value of lines, based on paragraphs, for the scrollbar if we manage many lines, leaving the exactly calculation for a thread or for idle time. It would avoid to break all the lines for the real calculation of line number. After all, it's only necessary for the scrollbar.
[1], we could need to break some previous or next paragraphs, that we need for to show an entire screen.