The reason is that command substitution, just as any other shell expansion, is designed to provide a dynamic means of generating command-line parameters for executing a command. So in order to run
cmd1 with the output of
cmd3 as arguments, these two have to be run first.
The exact order of shell expansions can be found e.g. in the Bash manual. Command substitution is ranked second after brace expansion, and at the same rank as tilde expansion, parameter (i.e. variable) expansion and arithmetic expansion. Those expansions that have equal rank are evaluated "in a left-to-right fashion", i.e. in the order they appear on the command line.
This would mandate that in case of nested substitutions, e.g.
cmd1 $(cmd2 $(cmd3)) $(cmd4)
the order would be
cmd1 as the first expansion would be that of
$(cmd2 $(cmd3)) which itself needs expansion of
$(cmd3), and then expansion of
$(cmd4), before the results are passed to the call of