(Much of the above could be written a bit more compactly, but I wanted to use clear names like publicSymbols rather than my usual pubs or anonymous object literal. You can write it a lot more compactly if you want to have anonymous functions, but I don't much care for anonymous functions.)

But in your specific case, it's easier to extend the global onload function:

extendFunction('onload', function(args) {
doSomethingHereToo();
});

I actually really like your question, it's making me think about different use cases.

For javascript events, you really want to add and remove handlers - but for extendFunction, how could you later remove functionality? I could easily add a .revert method to extended functions, so init = init.revert() would return the original function. Obviously this could lead to some pretty bad code, but perhaps it lets you get something done without touching a foreign part of the codebase.