Every NES emulator I've found runs off ROM dumps. Would it be possible to run an emulator using the original cartridges directly? It's probably not the most practical way of doing things, but the "cool factor" of plugging Super Mario Bros. into the front of your computer is definitely there.
You can, provided that you have a cartridge reader that you can plug to the computer that runs the emulator. One such reader is Retrode; if you google "nes cartridge reader" you will find references to more similar products, even DIY kits.
It depends what you mean by "run off the real carts".
If you mean dump the cart and then immediately run the dump, that is perfectly possible, though in some cases dumping the cart requires prior knowledge of the carts internals (IIRC there is a big database of known NES carts and how to dump them).
If you mean actually reading the cart in real-time as the game runs, that isn't really practical for software emulators (though it's perfectly possible for a FPGA based reimplementation of the hardware).
The thing is emulators don't run in real-time. Some aspects of the original hardware are slow to emulate and the host OS can take away the CPU from you for far longer than the clock period of the thing you are emulating.
The solution to this is to separate "emulated time" from "real time". When emulating regular code, emulated time advances significantly faster than real time, this makes up for the inevitable stalls in emulation due to the OS, complex to emulate hardware, IO processing etc. To keep the overall execution speed correct the emulator will pause periodically (most likely once per frame).
But that renders running directly off the cart impractical, when the emulator is racing ahead it will be reading the memory very quickly, almost certainly quicker than the cart and its reader can cope with.