What are the limitations of the theming system?
Theming hooks (templates and theme functions) defined in hook_theme() implementations are always overridable. But they have to be used properly, always use theme('foo', $bar), never theme_foo($bar).

In Drupal 6, (pre)process functions are only available for templates, not theme functions. Also, the templates must be be overriden in the theme otherwise the preprocess function from the theme is not used. So to have your THEME_preprocess_node(&amp;$variables) function used, you need to have the node.tpl.php in your theme folder.

Another limitation (actually a bug) is that for a template to be overridable in a theme, the file name (without the .tpl.php extension) must be exactly the same as the theming hook name except for the _ that are replaced by -:

function MODULE_theme() {
  return array(
    'overridable_template' =&gt; array(
      'template' =&gt; 'overridable-template',
    ),
    'non_overridable_template' =&gt; array(
      'template' =&gt; 'nonoverridable-template',
    )
  );
}