How do I sync taxonomy terms with the second level of a menu?
I used this on a site a few months ago to essentially do the same thing:

function _foo_add_submenu ($menu_name, $vid, $plid)
{
  $vocabulary = taxonomy_vocabulary_load($vid);
  $tree = taxonomy_get_tree($vid);

  if (count($tree) &gt; 0) foreach ($tree as $term) {
    $item = array(
      "link_path" =&gt; "taxonomy/term/{$term-&gt;tid}",
      "link_title" =&gt; $term-&gt;name,
      "menu_name" =&gt; "menu-menu",
      "plid" =&gt; $plid,
      "router_path" =&gt; "taxonomy/term/%",
    );

    $sql = "
      SELECT menu_links.mlid
      FROM {menu_links} menu_links
      WHERE menu_name = :menu_name AND plid = :plid AND link_path = :link_path
    ";

    $result = db_query($sql, array(
      ":menu_name" =&gt; $menu_name,
      ":plid" =&gt; $plid,
      ":link_path" =&gt; $item["link_path"],
    ));

    $record = $result-&gt;fetchObject();  

    if (isset($record-&gt;mlid) &amp;&amp; $record-&gt;mlid &gt; 0) $item["mlid"] = (int) $record-&gt;mlid;

    menu_link_save($item);
  }

  menu_cache_clear_all();
}


$menu_name is the menu to mess with, $vid is the vocabulary to build from, and $plid is the item to add to.  When you run this, you will end up with a real menu in admin/structure/menu/manage/menu-whatever.  You will need to add some additional housekeeping functions to handle adding terms, removing terms, etc, but they all involve similar functions and menu_link_save / menu_link_delete and menu_cache_clear or menu_cache_clear_all being called from the right taxonomy hook.