This is kind of Fred Flintstone, but if it's really true, as your example indicates, that groups and items render identically, maybe the easiest thing to do is to preprocess the data to flatten it into a single level array. If there are differences between groups and items, then the array would need to hold objects like this [{type: 'group', name: 'Group 1'}, {type: 'item', name: 'Item 1'}], instead of being an array of name strings. In an ideal world, maybe you could get the server to return that format in the first place.
In any case, at that point, rendering is just an ng-repeat over the array.
Make sense? It's not great to futz w the data for the sake of rendering, but doable is good too (:-).
Dave