Se può servire a qualcuno, ho risolto il problema spostando il comando ShellExecute() dopo aver chiuso il secondo begin...end, quindi:
codice:
procedure TfrmVisResp.btnMailingListClick(Sender: TObject);
var
  gname, mail, gmail:string;
begin
  while not DMSsn.Referenti.eof do
    begin
        gname:=DMSsn.ReferentiEMAIL.AsString;
        gmail:=trim(gname)+';';
        DMSsn.Referenti.Next;
        ListBox1.Items.Add(gmail);
        if ListBox1.Items.Text<>';' then
        begin
          mail:=trim(ListBox1.Items.Text);
        end;
    end;
      ShellExecute(Handle, 'open', PChar('mailto:'+mail), nil, nil, SW_SHOWNORMAL);
end;