Overriding the function of a module in another module Module1 has a function named 'function1'. 'function1' is not a type of hook, but it is a menu callback, or called inside a hook.

Module2 wants to override 'function1' using all variables which are available to function1 inside Module1.

I can call function1 using module_load_include(), but I need to override the called function.

How can I achieve this?
If you want to use a different menu callback, you can implement hook_menu_alter() to change the menu callback. Suppose you want to override the menu callback Drupal defines for search, you could use the following code.

function mymodule_menu_alter(&amp;$items) {
  if (isset($items['search'])) {
    $items['search']['page callback'] = 'mymodule_search_view';
  }
}


From mymodule_search_view() you can call search_view() without first including the file containing it, as that is done from Drupal before calling the menu callback.

Similar code could be done if the menu callback is returning a form, with the exception that, instead of changing the page callback (which probably is drupal_get_form()), you would change the page arguments to use as first argument the callback name of the function returning the form array. Rather than doing this, you should implement hook_form_alter(), and to hide the not necessary form elements with $form['element']['#access'] = FALSE', and not withunset($form['element'])`.

As for replacing a function that is called from a hook, what can be done is removing the hook implementation that calls that function, and replacing it with a different implementation. It is possible only with Drupal 7, and it must be done carefully. (I will explain why right.)
Suppose you want to change the function called in menu_node_update() (the implementation of hook_node_update()) from menu_node_save() to mymodule_node_save(). You could use the following code.

function mymodule_module_implements_alter(&amp;$implementations, $hook) {
  if ($hook == 'node_update') {
    $group = $implementations['mymodule'];
    unset($implementations['mymodule']);
    unset($implementations['menu']);

    $implementations = array('mymodule' =&gt; group) + $implementations;
  }
}

function mymodule_node_update($node) {
  mymodule_node_save();
}


In this way, menu_node_update() would not be invoked anymore, but mymodule_node_update() would.

Normally, modules that depend from a hook implemented by another module don't check if that hook is executed; they check the module is enabled (and assume the hook is invoked), or they add that module as their dependency. Avoiding a hook is executed could cause problems to other modules which could be difficult to track. If it is really necessary to avoid a hook implemented by another module is executed, you should first check on a test site that all is working as expecting. Bear in mind that future Drupal version could break your code, and the code you are writing should be tested on future Drupal version too (when they are available).