You may mix up block data with the UTXO set (unspent transaction outputs).
Bitcoin Core uses LevelDB for the later (the UTXO set).
Quick lookups for unspent transaction is important for performance.
The block data is a different things. If you have a non-pruned peer (normal full node mode), Core stores all block files so it can serve those blocks to other peers bootstrapping (and for chain reorganisations).
Those block files are not an API, use it with care. If you interested in parsing blocks, consider using the RPC or REST API.
The .blk files contain a bunch of blocks (raw network serialisation format). There is also a block index (a levelDB database) that contains the file offsets and the headers.
Learn more about the blocks format here (or google).