I don't know if this answers your particular question, but this is how I handle fi ligatures for Turkish:
feature liga {
# Latin
sub f i by fi;
sub f l by fl;
lookup NOFI {
sub f l by fl;
} NOFI;
language TUR exclude_dflt;
lookup NOFI;
} liga;