I believe placing a face-based family over a linked face is possible using this method.
First, get the faces from the linked document using get_Geometry. Then, extract the references from these faces.
Next, translate the references to the current document using:
var linkedReference = originalReference.ConvertToStableRepresentation(linkedDocument);
Finally, place the family:
Trans.Start(); // start transaction
Doc.Create.NewFamilyInstance(
linkedFaceReference,
linkedFaceReference.GlobalPoint,
XYZ.BasisZ,
famSymbol
);
Trans.Commit(); // commit Transaction
To accurately place the family, you need to ensure that the point where the family instance will be placed corresponds to the linked document's coordinates. Since you already have the point in the current document, use the linked instance's transform to convert this point to the corresponding position in the linked document.
Once transformed, project this transformed point onto the faces you've extracted from the linked element's geometry. Identify the nearest face to this projected point. You can then use this projected point, and transform it back to the current document's coordinate system, and now you can use it as an argument instead of linkedFaceReference.GlobalPoint in the example above.
I can't say this is the best approach, but logically this should work.
For a detailed explanation of a similar method, you can refer to my summary here.
Moustafa Khalil