I believe you'll be able to do what you want using design functions like LayoutObjectNames and GetLayoutObjectAttribute. First, though, all your objects (labels, fields, etc.) need to have names. You'll want to name them in such a way that, from the object name, you can determine whether this is a field, label, button, etc.
What comes after that is a parsing exercise. It's challenging, but it can be done.
Of course I have no idea what it is you are storing, but consider using records, rather than fields; this way, a label is a direct attribute of an entity of type x that has a certain value (in short, an Entity-Value-Attribute model).
Different layouts may also hint at different “sets”, which could be handled much more flexible in this approach.
Not sure if this is applicable in your scenario; just some food for thought.