I can't say we've ever gone any lengths do prevent it - as we simply don't do it. Or worst case scenario (the underpant elves changed your core code) - you see it on the next Git commit that you issue. 

But I guess there is a few ways to clean up/prevent it happening. So just to elaborate on your bullet points.

###Finding modifications

Identifying changes is fairly easy, just download a clean equivalent release and perform a `diff` on the respective directories. 

    diff -r ./app/code/core ./clean_mage/app

*You can find a more more guidance in the [Magento debugging answer.][1]*

###Preventing modifications

You could prevent edits to the core just by altering file permissions, make them read/execute only 

    chmod -R 555 ./app/code/core

Or go a step further and make them immutable

    chattr +i -R ./app/code/core

###Undoing modifications in real-time

If you are using Git, and your core is under version control, you could add a hook just to checkout the core prior to a commit

    .git/hooks/pre-commit
    
    #!/bin/bash
    git checkout /home/path/public_html/app/code/core

###Using local

Its a last resort really. The PHP include path (its not a Magento thing) will prevent you from being able to declare the same class twice. 

>   Local > Community > Core

So the moment you add a class to `local`, the respective matching file won't be read from anywhere else. So you need to copy in the whole file contents.

For `abstract/final` classes - you don't have much of a choice, but for most other tasks, you can usually rewrite the class and bundle it into a module in `community`

 [1]: http://magento.stackexchange.com/questions/428/fundamentals-for-debugging-a-magento-store