Visto che mi sto divertendo a smanettare, ho trovato che per fare questo è necessario solamente conservare traccia del numero di controlli inseriti.
Nell'UC, che ha un TextBox, voglio mantenere lo stato. Perciò aggiungo questa proprietà pubblica:

codice:
    Public ReadOnly Property TextName$()
        Get
            Return Me.TextBox1.UniqueID
        End Get
    End Property
La pagina ospitante ha il codice:
codice:
    Private n_righe% = 0

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Inserire qui il codice utente necessario per inizializzare la pagina
        Dim o As Object = Me.ViewState("n_righe")

        If o Is Nothing Then
            n_righe = 0
        Else
            n_righe = CInt(o)
        End If

        For i As Integer = 1 To n_righe
            Dim uc As UCriga = DirectCast(LoadControl("UCriga.ascx"), UCriga)
            uc.Testo = Trim(Me.Request.Form(uc.TextName))
            Me.PlaceHolder1.Controls.Add(uc)
        Next




    End Sub

    Private Sub AggiungiRiga(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim uc As UCriga = DirectCast(LoadControl("UCriga.ascx"), UCriga)
        n_righe += 1
        Me.ViewState("n_righe") = n_righe

        Me.PlaceHolder1.Controls.Add(uc)

    End Sub


    Private Sub TogliRiga(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If n_righe = 0 Then Exit Sub

        n_righe -= 1
        Me.ViewState("n_righe") = n_righe

        Me.PlaceHolder1.Controls.RemoveAt(n_righe)

    End Sub