Different font formats place different restrictions on the use of references. This does NOT mean you should avoid references -- they are a useful way of encapsulating information even if the font format cannot support them directly. If FontForge finds a situation where it can't use a refered glyph as a reference it will fix it up somehow, usually this means replacing it with the equivalent outlines.
Let us examine the most common font formats:
TrueType also does not support mixing outlines and references.
If you have a glyph containing a reference which cannot be used (or that mixes outlines and references) then ALL references will be converted to outlines during output.
This means that any instructions in the glyph itself will be meaningless,
and any instructions in referred glyphs will not be executed.
NOTE: Just because general transformations are supported, it isn't always a good idea to use them. If you flip a reference, the rasterizer will probably have difficulties with it (its contours will run in the wrong direction). If you rotate a reference any instructions inside it will not work well.
If you have a glyph which contains exactly two references to characters which
are themselves part of the Adobe Standard Encoding, and one of those references
has an identity transformation matrix applied to it (that is, it is not moved,
scaled, rotated, flipped, etc.) and the width of the composite glyph is the
same as the width of this referred glyph and the other is only translated
(possibly by 0, but not scaled, rotated, flipped, etc.) THEN FontForge can
generate two references (this is done with the 'seac' instruction). CID-keyed
fonts do not support this.
The implications of this are that this form of referencing is useless for non-latin scripts (except for glyphs shared by latin and another script, Greek and Cyrillic often share the glyph used for latin A).
FontForge makes a slight extension, in that if you have a glyph which contains one single untranslated reference, then FontForge will add a dummy reference to the space glyph to make it fit the two reference requirement.
The second format is more general in some ways but has more arcane restrictions imposed on it. PostScript fonts have the concept of "subroutines" which can be used to define the contours of several glyphs. FontForge's algorithm is quite complex and can depend on what other glyphs are refered to. But basically if a glyph contains no hint substitutions, nor flex hints it can be put into a subroutine. If it does contain these it can be put into a subroutine if it has not been translated. Even if one reference cannot be put into a subroutine, another may be (ie. TrueType references are an all or nothing affair, that is not true of PostScript subroutines). If a reference cannot be put in a subroutine, FF may still be able to put some of its components (assuming it is a glyph with references) in a subroutine.
FontForge will recognize 'seac' as defining references, but it does not recognize subroutine calls. Use Edit->Replace With Reference after loading a Type1 font.
FontForge can also break an outline into smaller segments and place those in subroutines these may be shared more easily among glyphs. They are no longer true references, but they will make the output font smaller.
Here a referenced glyph can be put into a subroutine if it contains no hint substitutions, or if it is not translated and none of the other components of the final composite contain any hints at all. Again this is not an all or nothing affair.
And again FontForge can break glyphs into smaller segements which can be placed in subroutines and shared among glyphs. These are not true references but do make the font smaller.
FontForge will not recognize any references when loading a Type2 (otf, cff, cef, gai) font. Use Edit->Replace With Reference after loading the font.