I was having some problems dynamically creating the <tabPanel>-s, by iterating over datastructures too. I think you will be able to apply my solution to your problem. Notice the ${...} used in tabPanel, not #{...}.
<xp:tabbedPanel partialRefresh="true">
<xp:repeat var="entry"
value="#{javascript: [{'label': 'first', 'content': 'foo'}, {'label': 'second', 'content':'bar'}]}"
removeRepeat="true"
repeatControls="true"
rows="30">
<xp:tabPanel>
<xp:this.label>${entry.label}</xp:this.label>
<xp:text escape="value" value="${entry.content}">
</xp:text>
</xp:tabPanel>
</xp:repeat>
</xp:tabbedPanel>