How does one create terms on hook_install if hook_taxonomy_default_vocabularies is used in the same module?
Although you can use hook_install(), it's best to use hook_enable() to check if the vocabulary exists and, if not, create it programatically:

$vocabularies = taxonomy_vocabulary_get_names();
$pos = array_search('my_vocabulary', $vocabularies);

if ($pos !== FALSE) {
  // its a keyed array so the $vid is actually $pos
  $vid = $pos;
} else {
  // arrays are more convenient to initialize
  $vocabulary = array(
     'name' =&gt; t('My Vocabulary'),
     'machine_name' =&gt; 'my_vocabulary',
     'description' =&gt; t('My description'),
     'hierarchy' =&gt; 1,
     'module' =&gt; 'your_module', // or nothing
     'weight' =&gt; 1
   );
   // argument must be an object
   $vocabulary = (object) $vocabulary;
   taxonomy_vocabulary_save($vocabulary);
   // horray, we have a vid now
   $vid = $vocabulary-&gt;vid;
}

// now that the vocab exists and you know the $vid, create your terms
// ...