I'm a software engineer now (well, kind of), so I am qualified to espouse great wisdom on my experiences in software engineering.
Last week we had cause for a couple of refactorings in our EMF models.
The first refactoring was very simple. One of our metamodels had a traceability link to source model objects, which needed to be generalised to be able to point to a more structured "assembly" of source model objects. For some reason, I already had a metamodel for these assemblies, so it was a simple matter of moving those metamodel elements into our main metamodel. The generated code for the assemblies hadn't been modified, so I was able to just cut&paste in the EMF editor, and add a reference to allow either single-element or assembly traceability. Then, using eclipse's call hierarchy view, I tracked down all the references to the single-element traceability, and generalised them to handle the new structure.
The second refactoring was more complicated. For one reason or another, we needed/wanted to change the name of one of our metamodel packages (and some other stuff, but let it just be the name). This meant that almost all of our code would change package, and a number of classes would change classname. Unlike the previous refactoring, this would have a huge effect on our generated code, which would need to be moved to new files, in a way that correctly overrode the default generated code. When you generate "over the top" of files, EMF is good at taking care of this, but I wasn't sure it would work when the generated files are "new". (I was pretty sure it wouldn't).
The approach we took was to anticipate all the effects of the metamodel changes we were making. We worked out that these were a number of changes to classnames (where the package prefix forms part of the classname), and a number of package renamings. We carried these out (in that order) using eclipse's Java refactoring (which is very good). Notwithstanding some complaints from SVN, this went smoothly. Then, when it came time to regenerate code from the changed metamodel, EMF found itself "overwriting" existing code, rather than creating new code. The refactoring was completed with only one or two lines of code needing to be hand-modified (for the curious, we had neglected to refactor some inner classes).
A refactoring framework for eclipse would be really nice. I do recall some mention of it on the EMF forum, but I don't know how far they got, or how they were going about it. If I were to go about it, experience like that above would probably lead me to look at essentially mapping eclipse refactorings onto generated Java refactorings (probably implemented as commands, off the top of my head).
In the interim, my advice would be that whenever you are refactoring a metamodel, think about the consequent changes for your non-generated code, and if necessary consider pre-empting the metamodel refactoring with Java refactoring. This way of thinking might not be elegant (the "no-one thinks about bytecode/binary when they're writing Java/C" argument), but it can save you some pain.
(From a more academic, "transformation" point of view, this is probably a good argument for traceability in transformations, and for treating "replay" transformations differently to "green field" transformations).