The structured storage part isn’t the problem, because Word doesn’t actually use it much except when you use OLE (the seemingly builtin things that use OLE are images, the abominable Equation, and
maybe WordArt). IIRC the Word 97 format is essentially the previous Word format (whatever it was called) changed to use UCS-2 throughout, packed into a single stream in OLE storage, plus a bit of frills such as \005SummaryInformation.
(This is to be compared with e.g. OOXML spreadsheets, which go as far as to store the sheets of cells and the strings inside those cells in two completely different entries of the ZIP container.)
Everything that a Word document is maps 1:1 to a relatively straightforward string-of-bytes RTF. (With, again, the exception of OLE, which is why WordPad can write stuff that it assigns a .DOC suffix but is in fact an RTF stuffed into structured storage.) In fact, there was a piece of Microsoft software called the WinWord Converter SDK (Q111716) that used RTF as an intermediate format and had a bunch of DLLs that could read and write other formats; a compatible set of DLLs shipped with Windows and supported WordPad, and a larger one shipped with Word proper and contained all of its foreign format support.
However, if you look at that perfectly innocent, easily parseable RTF, you’ll find that it is still a nightmare. Not only because Word generated horrible unoptimized RTFs and only used Unicode text if it couldn’t avoid it, but also exactly because it can represent everything that a Word document is, and that is an unfathomable amount of stuff to be able to represent, even for Word 97. (None of which the alleged RTF spec tells you how to render or lay out.)
My personal answer to the question “why can’t one replace Word?”, or rather “why are all replacements for Word either failures or not particularly better?” is that Word can do (and thus supporting its format requires you to implement) so much that being compatible with Word is effectively equivalent to just being Word. To be fair, OpenOffice Writer is a pretty decent Word and I do use it when I need one, but it’s very uninteresting as a contribution to the field of handling formatted text on computers.