What is InstallerException and can it be thrown from a hook_install() implementation?
No, this is not for hook_install(), this exception is for errors during installation of a new drupal site:

install.core.inc:

function install_drupal($class_loader, $settings = []) {
  ...
  try {
    // Begin the page request. This adds information about the current state of
    // the Drupal installation to the passed-in array.
    install_begin_request($class_loader, $install_state);
    // Based on the installation state, run the remaining tasks for this page
    // request, and collect any output.
    $output = install_run_tasks($install_state);
  }
  catch (InstallerException $e) {
    ...
  }
}