Can theme() call a theme function from another module?
Yes, a module can call, with theme(), a theme function that is defined from another module. If it were not so, no module could use theme_link(), since that is defined as one of the System module theme functions. This is contrary to Drupal philosophy; limiting a module to use the theme functions it defines would not make sense.

See system_theme() which calls drupal_common_theme() to add link to the theme function it implements.

function drupal_common_theme() {
  return array(

    // From theme.inc.
    'html' =&gt; array(
      'render element' =&gt; 'page',
      'template' =&gt; 'html',
    ),
    'page' =&gt; array(
      'render element' =&gt; 'page',
      'template' =&gt; 'page',
    ),
    'region' =&gt; array(
      'render element' =&gt; 'elements',
      'template' =&gt; 'region',
    ),
    'status_messages' =&gt; array(
      'variables' =&gt; array('display' =&gt; NULL),
    ),
    'link' =&gt; array(
      'variables' =&gt; array(
        'text' =&gt; NULL,
        'path' =&gt; NULL,
        'options' =&gt; array(),
      ),
    ),
    // …
  );
}


Notice that the correct theme function definition that works for Drupal 7 is the following one; the one you are using is only for Drupal 6 or previous versions.

function def_theme() {
  return array(
    'example_def' =&gt; array(
      'variables' =&gt; array('nid' =&gt; NULL)
    )
  );
}


Since your example of calling the function is theme('example_def', $var), I take you are using Drupal 7, for which your definition would not work.