I've also run across the big vertical break between submit
buttons from different forms on a page. One thing I've
done (which is far from optimal, but looks better than the
big gap) is to stick the buttons in a table, each in its
own <td>. This at least gives the illusion of a row of
buttons.
The approach of having one main script dispatching calls to
various handlers sounds like a good one.. I just wanted to
make sure and point out the performance benefit of not
having to parse 2000 lines of code to then only execute 20.
I've seen this done way too many times in beginning CGIs.