No zavoláním FlstCustomObject.Clear je všechny zrušíš a zůstane jen ten prázdný seznam; pokud na ty rušené objekty ukazovaly ještě jiné proměnné, tak ty nadále ukazují kamsi a jakmile se pokusíš k nim přistoupit, bude problém.
Zavoláním FreeAndNil(FlstCustomObject) zrušíš všechny ty objekty a zrušíš i ten seznam jako takový.
Pomocný seznam FlstCustomObject jen kvůli tomu, abych něco nezapomněl zrušit, bych nedělal. Když něco zapomeneš zrušit, máš jen memory leak, ale pokud použíješ FlstCustomObject.Clear, na (bývalé) objekty ukazují ještě jiné proměnné a ty je použiješ, bude z toho nejspíš Access violation, náhodná data apod., což je větší průšvih
Tzn. když už si někde něco vytvoříš (třeba na formuláři), tak do OnDestroy dáš zrušení a nepotřebuješ k tomu pomocný seznam všeho, co se má zrušit.