Both protobuf and plain C structs are append only formats if you put the message-type and size at the start of the C-struct.
You can build large hierarchical structures of messages with lists contained therein. It's pretty much how .mov/.mp4/many, many media container formats work. The technique dates back to the Amiga days.