What do we gain from hashing the length in Merkle–Damgård? Assuming our fixed compression function $h$ works for inputs of length $i(n)$ and output strings of length $o(n)$, if $2o(n) &lt; i(n)$, why do we need to calculate $h(z_B||L)$ where L is the input's length instead of just concatenating $z_B ||L$? What do we gain from hashing the length?
I am making the assumption you are asking why not just append the length to the output of the hash, the question is not quite clear on that. Take a very simple example of SHA-1 modified to do what I think you are asking. The results here are fake, but the example stands.

If we hash a byte stream of 0xFE25B6A1C8, we may receive the digest a9993e364706816aba3e25717850c26c9cd0d89d0000000000000028.

If we hash a byte stream of 0xFE25B6A1C800, we may receive the digest a9993e364706816aba3e25717850c26c9cd0d89d0000000000000030.

It should be clear that this is not a desirable property. 

The same property applies to other inputs where there are trailing 0 bits within the same compression function call and the same total number of compression calls, the bits have no effect on the hash function without the length because of how they are used to generate the message word array.