1. Multi-line regular expressions. Typically the regex library is given an array of text to search in (). We have no such buffer to give.
2. Line wrap. Adding or removing a single character near the top of the file might require the entire file to be re-wrapped. You need to complete the wrapping process before you know how many lines are in the buffer and therefore can update the size and position of the vertical scroll bar's handle.
3. Column mode editing of text containing tabs.
Beyond those features, these data structures (gap buffer and piece table) don't seem well suited to operations that effect the entire buffer, such as convert-tabs-to-spaces.
At least when I used PCRE, it seemed to require this.