contrary to popular belief I don't think the reason why it's so hard to not make errors is just people being bad at programming. renpy uses 4 different languages, with three of them very similar to each other with subtle semantic differences.
They have the same structure, but not the same vocabulary. There's way too few intersections between them for the, even fewer, semantic differences to be an effective problem. Plus, like they each rely on their own parser, they caught 99% of the possible errors due to those differences.
bad, vast and out of date documentation,
The official documentation is up to date, and any outdated part of the official site, like the cookbook by example, is explicitly stated as it. For everything else, it's a question of common sense, don't take as accurate information that are 10 years old.
and to top it off forces you into using GOTO like an animal. it single-handedly throws 50 years of software engineering theory out of the window.
You're the perfect example of those addressed by Dijkstra when he said this:
"
You must be registered to see the links
"
Not only Dijkstra's publication isn't effectively a plea against the goto statement, but also others, among which Knuth in his "
You must be registered to see the links
", have explained why it's before anything else a question of context. What anyway Dijkstra said himself more than once, by example when he said the, "please don't fall into the trap of believing that I am terribly dogmatic about [the goto statement]. I have the uncomfortable feeling that others are making a religion out of it, as if the conceptual problems of programming could be solved by a single trick, by a simple form of coding discipline!", quoted in Knuth's publication.
So, no, Ren'py isn't throwing "50 years of software engineering theory out of the window". Like it's perfectly possible to write a full game in Ren'py without the use of its goto equivalent, by offering this choice in the structure followed, it just apply those 50 years of software engineering theory.