CBOR doesn't define application structure in the same way that JSON doesn't define application structure. It's merely an encoding format for somewhat-structured data. By "somewhat-structured" I mean that there's basic types and arrays and maps, but that's it. With CBOR encoding (note that they call it "object representation" in the spec), you still have to define and have a shared meaning between devices or applications.
CBOR has maps, similar to JSON objects. You can read and write key/value pairs and choose to examine the associated value for only the keys you're interested in. But it's up to the application using this library to process and handle and store everything. libCBOR merely encodes and decodes, and also provides some convenience functions.
Hope this answers your questions.
Curious, what is this "pragma to push a 1 byte boundary" of which you speak?