Generally the best argument (other than the warm fuzzy feeling you get from helping the community) for pushing code back upstream (as well as keeping stuff in local/ and avoiding customising core) is to minimise the pain (and cost!) of upgrading later.
Say you start with 1.9 and you customise it a lot and don't bother pushing any of it upstream. After a year, Moodle 2.0 comes out and people of course want to upgrade, to get to use all the shiny new features. But suddenly you realise that you have all these customisations - and you essentially have to analyse every single one, figure out if it's still relevant, if it is, find where to repatch the code, if it's not, discard it, but realise that maybe Moodle has changed in another subtle way that means you have to customise something else.
Repeat every release cycle ad nauseum.
It gets a bit easier if you have good SCM, but even so.. it's a challenging thing to go through , and it costs money. Every time.
Hope that helps!