One approach you can use is:
root-> A -> B -> C -> (fakeRoot) => (real root)
Before leaving root, you can create a snapshot of the root (like this)
Then you can use your fancy modal transition to transition to the "fake root" but put the real root behind it, in the type of controller you want for moving forward. Then just remove the fake root to expose the real one.
- Make a viewController called "fakeRoot" controller that was just a big imageView that fills the screen
- Set the imageView to the image of "root" that you created with the snapshot above.
- do your modal transition to this imageView
- pop to the root of your nav controller without animation (that should make root appear, but you won't notice because your modally presented view will looks just like it)