"Dass das so funktioniert" ist die Anwendung eines der grundlegensten Prinzipien der
OOP: Abstrahierung.
TStrings ist eine abstrakte basisklasse. Alle Funktionen darin sind abstrakt, d.h. nur deklariert, nicht definiert. Deshalb wird "Tstrings.Create" auch einen abstrakten Fehler werfen.
TStringList ist von TStrings abgeleitet und implementiert damit das Stringlist-"Modell".
Denkbar wäre eine Ableitung "TRegistryList", die diese Strings in die Registry speichert. Sie wäre mit TStrings und allen FUnktionen, die mit TStrings arbeiten, immer noch voll kompatibel.
Man kann z.B. auch in jedem TNotifyEvent mit (Sender as TControl) arbeiten, da alle Sender wie TEdit, TComboBox, TForm von TControl abgeleitet sind. Auf alle Funktionen und Eigenschaften, die in TControl schon definiert sind (z.B. Tag) kann man damit schon zugreifen.