Possibly because it has never occurred to us (or at least, not to me) that anyone might want to make 3rd-party save file reader/writer software by reimplementing everything from scratch instead of reusing the existing C++ functions with some form of binding to the language of your choice.
There's savask's neural network save classifier which reads save files using its own functions in Haskell, though I think it does use an existing library for BSON parsing. But if I were making a save classifier I'd do feature extraction in C++ using the existing functions, before passing the values to whatever I want to use for the neural network (though that would probably also be C++).
boxmein is making a webpage that documents some things, such as the parts and partsPos format, which I'm sure he will post a link for in this thread once it's finished.
Edit: and to answer your question about the length value, that's the length of the embedded document with name "origin", i.e. just the origin = { ... stuff ... } bit, not the whole save file.
Reading the specification carefully:
document ::= int32 e_list "\x00"
"The int32 is the total number of bytes comprising the document"
It looks like this number includes all the things listed under document ::= , including the length and the terminating 0 byte (so start counting at the beginning of the length field). Sorry if that wasn't clear from my answer.