Okay, I've figured it on my own, it's pretty long to explain for my end but here's at least how you switch from the root state machine to a sub-state machine (it's on C# but it shouldn't be that hard to convert it to GDScript).
playback = (AnimationNodeStateMachinePlayback) GetNode<AnimationTree>("AnimationTree").Get("parameters/playback");
playback.Start(sub_machine_state);
playback = (AnimationNodeStateMachinePlayback) GetNode<AnimationTree>("AnimationTree").Get("parameters/sub_machine_state/playback");
playback.Start("idle");
However I don't know if I'm going to keep it like that, there's plenty of FSM plugins in the Assetlib that probably do the work without the hassle.