it depends on what your trying todo, unfortunatly c# is procedural so it goes down the tree and adds as it goes down.
What you can do is the brunt of the code first and adding the controls at the last stage.
To have controls before others or/and inbatween would require if functions, global varibles and gloabal objects. This will allow you to reuse the same object multiple times and to add them when you want.
How to set visual webparts to load one after - another sharepoint 2010
http://msdn.microsoft.com/en-us/library/dd583168(v=office.11).aspx
http://msdn.microsoft.com/en-us/library/dd583168(v=office.11).aspx#wssinsideoutch19_addinglayoutcontrolsandcontent
its all about thinking about the logic and applying to suit your needs :),
a if function within a forloop is what i use to recreate controls with unique id's and assign the text by sql DB table or from a list. So within the if function i display the title, outside of the if function is its subheaddings, the check im making with the if function is the title name is not the same ;) the adding of the control is in both the if and out of the if within the forloop so it would look like this:
Title
Subtitle
Subtitle
Title
Subtitle
Subtitle
Subtitle
Subtitle
Title
Subtitle
Subtitle
another trick if you dont like that method that i also use is to add through code some divs that wrap the code, within the divs is the controls. The divs obviously have their own id / class so you can rearange the order by css what is just as simple :)
this.Controls.Add(new LiteralControl("<div class='Div1'>"));
//do your control adding here
this.Controls.Add(new LiteralControl("</div>"));
hope it helps :)