Able coders in this thread said the DMD code was never "clean" from the start and kept getting worse. This continued until the mess in 0.16.
Unity, the other main option to Ren'py, has even more complicated code than Ren'py. So, it looks like Ren'py all the way...
As a Dev what is awkward sometimes is that Ren'py feels like it was written for people who don't code. I only say this because a lot of the coding we do in Ren'py is Ren'py specific. And while it is intuitive and makes sense for what you're trying to do, it sometimes hinders you from writing efficient python code that you could use to clean up complex story structures like ours.
We plan on a lot of twists, turns and alternate story paths, and if we could just encapsulate that in some basic python objects, life would be simple. But in Ren'py you have to sort of, "break out" of the Ren'py engine to run normal python code. But sometimes running those objects in that extra scope, causes some unpredictable behavior that simply can't be fixed because the rest of Ren'ply exists in a black box and you don't know what is going on behind the scenes.
There is a curve, both for people who code professionally and people who don't code it all. The curve just comes from two different directions.