This isn't really the right forum for this question. You'd be best subscribing and mailing to the facelets mailing list.
I'll answer it anyway.
c:forEach is a build-time tag that does not generate a UIComponent. It simply loops and replicates the component tree under it.
ui:repeat is a render-time tag and maps one-to-one with a UIComponent (UIRepeat). It does the "looping" during encoding similar to how h:dataTable works. Because the looping is done during the encoding you do NOT get a copy of the component tree under it each time round the loop like you do with c:forEach. This has advantages for a large table as it keeps the component tree size down.