Please add the method GetExtendedFaceEdgeLoops (or GetExtendedFaceEdgesAsCurveLoops) to the Face class.
The method should return the boundaries of the union of all the faces of all the elements that define the wall the face belongs to.
The method called with the large face on the snapshot below (the one the red boundary was created from) and with the smaller faces on the left and on the right, should return the same boundaries including one outer loop and three inner loops.
The snapshot shows the red lines representing the useless face boundary obtained with Face.EdgeLoops (or Face.GetEdgesAsCurveLoops) and the useful green boundary obtained by manually drawing it.

I can't think of any reason why an add-in would intentionally use the incorrect red boundary.
I can't think of one reason why an add-in would be unhappy-but-ok using the incorrect red boundary: it's easy and it's close enough.
I can think of many many many reasons why an add-in would use the correct boundary extended to the green line: it is correct.
A simple case like the one in the snapshot can be managed by playing with Wall.GetGeneratingElementIds(), but I am afraid that such an algorithm would be very brittle.