I am in the process of trying to recover files from a failed MacBook hard drive. While I've already replaced the drive in the machine itself and installed a fresh copy of OS X, I have the old drive in an external 2.5" SATA enclosure. I am able to (very, very slowly) view the directory structure and copy files, but it's an incredibly slow process and one failed file stops the whole thing. While I know there are paid drive recovery utilities out there, I'm just looking for something that will attempt to copy all of the files and directories from within a given directory and just skip the ones that can't be copied (ideally, I'd also like to know which files get skipped, but that's not a requirement).
You could use ddrescue to try to clone the raw volume (there are some notes on running it under OS X on tinyapps.org). It basically tries to read over & over, getting as much as possible from the disk.
This isn't ideal for your situation, since it 1) needs enough free disk space (either a volume or a disk image) to hold the entire drive, including free space (i.e. if it was a 200GB drive with 10GB of files, you need 200GB to hold the clone); and 2) it doesn't tell you which files it couldn't read (you can look at the log and see what blocks it hasn't been able to read, but figuring out what files those blocks are part of is not trivial).
The good news about is that, thanks to its log file, if it missed something you need (and you haven't modified the target volume at all -- mounting readonly is recommended), you can just run it again and it'll pick up where it left off, and keep hammering on the difficult blocks until they give up their data.