Why doesn't a form immediately call its submission handler?
To understand this, we should step back a bit in look at how forms are used regardless of what CMS (if any) is in use.

All &lt;form&gt; tags have an action attribute which define what page the browser should send the data to. If action is left blank (or missing) the browser will assume it should send the data to the same URL it is currently on. In this scenario the URL will be loaded to get the form and then again to send the data.

This is how the Form API works (by default). When you define a URL (using hook_menu I presume) that presents a form to the user, the browser will use the same URL to load and send the form.

The menu router in Drupal has to be run first so it can determine what page to display. Only after that does Drupal see that it has a form and then run the submit callback. In other words, you cannot change the order of these functions.

You can provide an #action attribute in your Form API implementation which (combined with a new hook_menu entry) should let you separate your form load/submit functions.