The only rule is that your value must be encoded as a string. We chose in our Portals application, to encode some information in a JSON blob. This has been useful to store some device specific information that didn't change often like location, or timezone. Datapoints like those made sense to store in meta, and not in a dataport.
"meta" is general purpose metadata. It can be used for application-specific purposes. For example, Portals uses meta to store a client's vendor and model, among other things.
Storing a list of your dataports is something that you could do, but can you tell me more about why do you want to do it?
A list of children, dataports included, can be obtained with an 'info' or 'listing' call.