{
A classe TStrings tem um método AddObject que
adiciona uma string para uma lista, e associa um
objeto com a string.

Se este objeto é uma string que você precisará
representa a string como um Objeto...
}

type
TString = class(TObject)
private
fStr: String;
public
constructor Create(const AStr: String);
property Str: String read FStr write FStr;
end;

constructor TString.Create(const AStr: String);
begin
inherited Create;
FStr := AStr;
end;

{
Você pode usa isso para adicionar
strings para qualquer propriedade de Objetos
assim...
}
var
ostr: TString;
begin
ostr := TString.Create(Minha String como Objeto);
ListBox1.Items.AddObject(Item string aqui, ostr);
end;

{
Para receber a string ...
}
ostr := TString(ListBox1.Items.Objects[0]).Str;

{
Tenha certeza que você liberou o objeto String
quando não precisa mais usa-lo.
}
for i := 0 to ListBox1.Items.Count - 1 do
begin
TString(ListBox1.Items.Objects[i]).Free;
ListBox1.Items.Objects[i] := nil;
end;