A simulator is a software that duplicates some processor in almost all the possible ways.
An emulator is a hardware which duplicates the features and functions of a real system, so that it can behave like the actual system.
Usually the emulators and simulators are used for the testing of new architectures and also to give training in some complex systems.
A simulator is a program which runs on the development system (i.e. your PC) and imitates the architecture of the target processor. For example an 8051 simulator will contain simulated registers, RAM and other stuff on your PC screen. You can run your program in this simulator and verify the functionality. You can single step your program, run it upto a certain address, add breakpoints etc.
Some simulators have small separate window which can be used to simulate the serial port as well. Some are able to simulate LCDs, LEDs, Keypads, ADCs etc. Note that it is usually not possible to debug time dependent bugs using a simulator since the simulator does not run your program at full speed, the speed at which your 8051 would run it.
An emulator is a piece of hardware which contains a processor that replaces your target processor. The emulator processor is under the control of development system. This allows you to execute your software at full target speeds but under PC control. Also you can trace the real time events and like a simulator you can single step, run upto a certain address, add breakpoints and so many other nice features.
An emulator is far more expensive than a simultor. But the benifit of accelerated development time easily justifies the cost.