I'm not so sure. If you use a line as your data element, then you're back to the original problem when the user (almost constantly) wants to insert new text within a line - you've got to store each line in a way that makes it efficient to move everything up by one when a new character is typed, but at the same time makes it easy to get to column N. Arrays are adequate in the normal case (since most files have lines well under 1000 columns if not more like 80), but in a sense the whole point of this B-tree stuff is to avoid being dependent on people conforming to someone's idea of the common case. Every so often some loony will load a file containing an enormous megabyte-line-of-death and then you have to be able to deal with that.
Cut and paste becomes horribly complex as well, if you use a line as your fundamental element, because a selected section can start half way along one line and end half way along another; so you've got to deal with fiddly special cases and splice lines together at each end every time you cut or paste. If you treat the file as basically a collection of bytes with a line/column indexing mechanism on top, then all of this happens completely automatically and you never have to worry about it.
Cut and paste becomes horribly complex as well, if you use a line as your fundamental element, because a selected section can start half way along one line and end half way along another; so you've got to deal with fiddly special cases and splice lines together at each end every time you cut or paste. If you treat the file as basically a collection of bytes with a line/column indexing mechanism on top, then all of this happens completely automatically and you never have to worry about it.