ho provato a fare quello che dici tu, cioè che il secondo controllo si aggiunga sempre ci sono riuscito utilizzando un array di usercontrol in una session. Magari non è il massimo a livello di prestazioni ma va'

Prima di tutto inizializzo la session nel global.asax

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim controlli(10) As UserControl
Session("p") = controlli
End Sub

Poi creo la segg. classe:

codice:
Public Class prop
    Inherits System.Web.UI.Page

    Public Function SetArrCont(ByVal value As UserControl) As UserControl()
        Dim controlli() As UserControl = Session("p")
        For i As Integer = 1 To 10
            If controlli(i) Is Nothing Then
                controlli(i) = value
                Exit For
            End If
        Next
        Session("p") = controlli
    End Function

    Public Function GetArrCont() As UserControl()
        Dim controlli() As UserControl = Session("p")
        Return controlli
    End Function

End Class
ed ecco la pagina con i controlli:

codice:
 

'Istanzio la classe creata
Private p As New prop

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            Dim ctlrigheord As UserControl = CType(LoadControl("ascx/ctl1.ascx"), UserControl)
            phUno.Controls.Add(ctlrigheord)
            lbRighe.Text = "- Righe: <font color=red>" & phUno.Controls.Count & "</font>"
            p.SetArrCont(ctlrigheord)
            ctlrigheord = Nothing
        Else
            For Each s As UserControl In p.GetArrCont()
                If Not s Is Nothing Then phUno.Controls.Add(s)
            Next
        End If


    End Sub

    Private Sub btnUno_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUno.Click
        'Dim ctlrigheord As Control = LoadControl("ascx/ctl1.ascx")
        Dim ctlrigheord As UserControl = CType(LoadControl("ascx/ctl2.ascx"), UserControl)
        phUno.Controls.Add(ctlrigheord)
        lbRighe.Text = "- Righe: <font color=red>" & phUno.Controls.Count & "</font>"
        p.SetArrCont(ctlrigheord)
        ctlrigheord = Nothing
    End Sub
NB cos' com'è la sequenza dei controlli è limitata a 10. A te espanderla.

Ti allego la solution di VS.
http://www.sndk.org/programma/provaloadcontrol.zip

Sndk