Nice insight.
And just as a reminder, for those who are "paranoid" and want to free the memory by themselves, once the interface is used (without letting the interfaces's _refcount do its job as a "garbage collector"),
you must assign the interface's variable with nil to free it, like:
GetFontFamilies function: TStringList;
begin
.../...
enm:= nil; //free the intrfc expressly
end;