Okay, let’s clarify a few things about emulators, the first of which is any phone that’s worth developing for has an emulator that you can be very productive with. If it doesn’t, you better build one for yourself. (and, btw, flu, a developer capable of such would best fill your needs). An emulator is at least capable of getting you productive for the platform (which is also the question at hand). If you were doing production code, would you want to get things onto a real phone, you bet.
With regard to hardware dependencies, it all depends if you’re writing driver/API code. If you’re developing an app on top of that (which most folks are), you can make a ton of progress with an emulator. And, in many cases, you better be if the hardware implementation doesn’t exist yet. If, instead, you’re the driver/API guy, you still have to consider the emulator, just from a different perspective.
Finally, and this last bit is important, the best developers won’t make poor assumptions based on how things work in an emulated environment. Rather, their assumptions are based on their knowledge and experience with embedded platforms that, while closer to desktops than ever, still have important considerations regarding resource limitations. That is, folks who just might recall what it was like to deal with a megabyte of memory and slow storage mediums are much less likely to embark down a dead end road. This notion doesn’t apply, of course, to things like pixel madness in bad emulators, but does apply to things like, well, reading every damn file on a device when you mean to display information about eight or so (or indexed information is required or whatever). Heck, the bigger mistake people make here is not considering scale in the first place. E.g. it works on the emulator, it works on the phone. It just works like crap when somebody who’s thinking puts 5000 contacts in it.