@Aljoscha sorry it seems I did misinterpret your intentions, I jumped to the conclusion you were intending it as an ssb format. (glad I made a seperate thread though!)
I'd be pretty happy with the format you describe (with length delimited, not element delimited, collections)
One thing is I have been wondering about is a varint based float. The most common number is probably a small integer. And encoding that as a base ten ascii string is more efficient for small numbers! (but obviously not for large numbers) but if you had a pair of signed varints (integer, exponent) you could encode everything efficiently. you'd need a length on the number fields though, but if you used the bottom couple bits to encode the type. If the length was greater than the length of the first varint, then include the exponent, otherwise it's an integer. I feel this is a bit ugly, though. Maybe just using 64bit float is good enough?
Also, this is an interesting idea: https://en.wikipedia.org/wiki/Unum_(number_format)