The BSON parser that MongoDB uses internally *only* does selective parsing. In fact it would be more correct to say it is an iterator over BSON fields than a parser of BSON objects. One of the important parts of BSON's design is that because every field is either fixed-size or prefixed with a size, it is easy to skip large swaths of BSON (eg, strings and whole subobjects) when looking for a field. This is unlike json, where you always need to examine every byte[1] until you find your desired field. If you are curious, you can see the logic for computing field size at
https://github.com/mongodb/mongo/blob/f27f82560f129f6ccd9b16fba887949ab197e678/src/mongo/bson/bsonelement.cpp#L709-L776, which is the meat of iterating over fields.
I think many drivers offer some form of lazy bson parsing, but I'm not an expert in them, so I can't answer that definitively.
[1] Although it is possible to use SIMD to examine 16 or 32 bytes at a time, as is done in the paper you linked to. I'm surprised that it didn't compare itself to
https://github.com/lemire/simdjson, which appears to be approximately as fast even though it *doesn't* do selective parsing.