I found a similar problem with Org mode when it comes to writing elisp code to handle org documents - it's almost all based on text parsing vs nodes. So simple automations I can program in a node based editor like the Leo Editor took a lot of effort in Org mode.
As an example, if you want the body (text) of a node, you have to get the substring from the beginning to the end. There wasn't (probably still isn't) an API to get the body. If you want to do a depth-first/breadth-first traversal of nodes, it's not as straightforward as one would think.
I hope someone comes up with a node based API for Org mode.