How to override a module theme function in a custom module but still allow themes to override the template file?
Think what you describe could work without falling back to the field module's function:


Add &lt;?php function MODULENAME_preprocess_field($variables) ?&gt; and set a $colon variable with either ':' or ''
Copy the theme_field function in your module and rename it &lt;?php MODULENAME_field(&amp;$variables) ?&gt;
Replace the code that renders the label with: &lt;?php $output .= '&lt;div class="field-label"' . $variables['title_attributes'] . '&gt;' . $variables['label'] . $variables['colon'] . '&amp;nbsp;&lt;/div&gt;';?&gt;


Might also just document for themers that in the template file they should use $colon for the module to work.