You may want to take a look at the 3Delight render engine exporter. It creates a dynamic UI on-the-fly. Basically it is using the python exec command to issue code snippets that define new properties. Then to display them use hasattr.
if hasattr(ptr, prop_coll) and len(getattr(ptr, prop_coll)) > 0 and getattr(ptr, prop_index) >= 0:
item = getattr(ptr, prop_coll)[getattr(ptr, prop_index)]
self.draw_item(layout, context, item)
The CollectionProperty example uses an add() method, which is not mentioned at the CollectionProperty class reference page, or indeed anywhere else in the API documentation that I can find. I presume that CollectionProperty has other handy but undocumented methods - such as remove(), perhaps?