The output is fully as expected and specified. The <ui:repeat> is a render time tag, not a view build time tag like <c:forEach>. After building the view, <h:panelGrid> ends up with 1 child component (the <ui:repeat> itself), not with n <h:outputText> components like as with <c:forEach>.
You need a <h:dataTable> instead. It's designed for exactly this purpose.
<h:dataTable var="o" value="#{mybean.list}">
<h:column>
<h:outputText value="#{o.text}"/>
</h:column>
</h:dataTable>