Puoi usare gli array dinamici, che possono essere dimensionati attraverso la procedura SetLength.
codice:
var
  v: array of Integer;
begin
  // Alloco spazio per 20 elementi
  SetLength(v, 20);
  v[0] := 1;
  v[1] := 20;
  // ...assegnazioni successive
end;
Generalmente, io preferisco di gran lunga lavorare con la classe TList, che fornisce l'implementazione di una lista (internamente basata su array); un esempio:
codice:
var
  MyList: TList;
  MyObject: TObject;
  Index: Integer;
begin
  MyList := TList.Create;
  try
    // Aggiungo il riferimento ad un oggetto alla lista
    MyList.Add(MyObject);
    // Ottengo il riferimento ad un oggetto 
    MyObject := TObject(MyList[Index]);
  finally
    MyList.Free;
  end;
end;
Non ho verificato il codice sopra, che dovrebbe servire solamente a dare un'idea dei possibili utilizzi delle varie soluzioni proposte.

Ciao!