Thank you, @morenoCami , for posting a question in the Crownpeak Community. I am a member of the Customer Success team and would like to help answer this question with the help of my friend, @DavidGreenberg, from Crownpeak Support.
After some back and forth, our recommendation is this:
Out.wrap() can be used to call a template, which is then run with the current asset as the value asset.
If you add this <%= Out.GetWrapContentPlaceholder() %> in the template, that puts the output of the current asset's template there.
We would love for you to try this and let us know if this solves your question. If so, appreciate if you would mark this as solved so others looking for the same answer can easily find it.
You do not need to do anything if you are using Out.Wrap. The parameter that you pass to the method is a template rather than an asset so the asset does not change in the output context. You can verify this yourself by outputing asset.Id in both the child and the navigation wrapper templates and you'll see that the output is the same.
However, if you are using Asset.Show to get the rendered output of another asset, then you will need to use the mechanism you outlined (UserVariables).