Why do form builders have a $form parameter?
Its an interesting question as there are now two ways of altering forms.

Using HOOK_form_alter ie book_form_node_form_alter with $form by ref and by inheritance returning $form as done in ie \Drupal\forum\Form\Overview::buildForm

class Overview extends OverviewTerms {
  ...
  public function buildForm(array $form, FormStateInterface $form_state) {
    ...
    $form = parent::buildForm($form, $form_state, $vocabulary);
    ...
    return $form;
  }
  ...
}


where \Drupal\taxonomy\Form\OverviewTerms::buildForm gets called using $form = parent::buildForm($form, $form_state, $vocabulary); thus in fact zapping $form.

Most code seems to return parent::buildForm($form, $form_state, ...); which we could call 'method' 3.

I guess hook_form_alter will disappear in the next version (10.x?) in favour of event listeners