Thank you very much for the steady and concise answer.
1. Creating content doesn't immediately add it to the managing panels. This process is delayed, so assuming you instantiate content and then try to reset the scroll view, doing so will do nothing. You can force widgets to be added by calling CreatePanel() (you can just broadcast it).
I'm not really sure what are you referring to with broadcast (most likely because of limited C# knowledge). In any case, reading the code of CreatePanel I see that what you do is look for a panel and force/assign it to the widget. It works, with a patch.
I must wait a handful of frames. Is there any other way other than forcing such a wait to reset the position? I can add a tweenalpha or something to disguise it, but that is nonetheless a patch.
Also, should I care about what panel is being picked and take precautions? or can I shamelessly use this method for all the widgets in each of these structures with no downsides?
2. Not sure about this one.
Actually, it was a byproduct of one of the other 2 problems. It's not happening anymore.
3. The option to prevent moving if the content fits is specified on the scroll view (cancel drag if fits). However if the content doesn't fit (like it starts outside), then you will still be able to move it.
That option has always been ticked, because it's the behaviour I obviously want.
I found that I explained myself very poorly, but I'm not going to rephrase it because I found more precise details about what was causing the strange behaviour: a ScrollBar.
If I just remove the scrollbar, this problem is solved and I cannot move outside the scrollview boundaries. As for now, I'm just not going to use the ScrollBars and work on the other two problems. If, in a future, I happen to encounter this again, I'll ask here with more details.