Also ist durch FreeAndNil(obj1) der Speicher zwar freigegeben,
aber noch nicht neu belegt?
Ja.
Und weshalb kann ich den Speicher über
obj1.Free mehrfach freigeben, aber nicht über obj2.Free?
Weil Obj1 auf nil zeigt und Free dadurch gar nix macht. Obj2 zeigt auf den Speicher, wo früher mal das Objekt war und free "knallt" dann.