@pablo_fernandez thanks for asking 
I'm working on a way to express narratives and cause-and-effect for a narrative based adventure game I'm envisioning with my partner. Basically trying to get away from basic dialogue trees and purely reactive narrative scripting, without giving up on authorial intent.
What I came up with is a sort of behavior tree pattern but dynamic. Meaning, the trees get modified at runtime based on other behaviors, triggers, and behavior contexts (the name I gave to self-contained behavior trees, such as a dialogue or other complex interaction that is only valid as long as the actor is not distracted from it). The system has to be able to manage actor types, a large number of individual actors, and many complex, interconnected behaviors that are often unique to an actor or a group of actors. Editor plugins are necessary and so on. It's inspired by some #InteractiveFiction techniques by Emily Short that I've read about but real-time interactive.
I got relatively far with GDScript and an autoload, but I was running into difficult and annoying bugs because I had to keep actor identifiers unique and consistent in several places. Getting all the signals wired up correctly, managing scripts, accessing pieces of the world state, persistence, and so on got difficult almost immediately, and I hadn't even implemented triggers or off-scene behaviors yet. I don't know how to do unit tests for GDScript. It was clearly not going to scale.
I decided instead to try to express this pattern with a custom server in an engine module. This server will manage the world narrative state, register the actors in the world and manage their behaviors, interactions, interaction contexts, triggers, etc. I have a long long way to go because I need to learn how Godot servers work, not to mention learn C++ and finish working out the pattern details...