This question comes up quite often, especially in the MiSTer Facebook group.
The biggest difference between the two really boils down to emulation fidelity. Typically a software emulator attempts to approximate a system as close as possible whereas an FPGA emulation attempts to create a precise reproduction of a system.
The difference between the two can become blurry in some circumstances, and there can be a fine-line between them under certain conditions.
When we use the term emulator (and we really mean software emulator) we are usually talking about the plethora of emulators out there that run on one of the 3 main operating systems; Windows, Linux, or MacOS. And this is the software emulation this article is referring to.
There are some software emulations that are designed to be as precise as an FPGA emulation. These are not run under any operating system at all but instead are written to run on bare metal. For example Emu68 on the PiStorm. In essence FPGA does not have a performance advantage over these and instead is possibly at a disadvantage due to raw clock speed. These are not the software emulators we are talking about.
So what creates a high-fidelity emulation? Emulating at the hardware clock level. It's all about how precise the timing is. A software emulator running under any of the main OS's is at the mercy of the OS for its timing. These main OS's are not real-time so therefore you are never guaranteed that something will happen at precisely an exact interval. Even at 60 times a second (which is a common video refresh rate), or every 0.016667 of a second (16.6666667 milliseconds) your going to have some slop. Whereas an FPGA is working at a hardware digital level where you use clocks for exact timing w/ no slop whatsoever. 60Hz is just one example. There are other timings like the CPU clock and sound chip clocks, etc...
So timing is really the #1 difference between software and FPGA emulation. And reading the controllers / joysticks and updating the video screen are the two most noticeable areas for lag (or other imprecise timming) when it comes to software emulators.
We can generalize too by saying that typically a software emulator is cutting corners and presenting an output to the user that attempts to match that of the system. Usually it's not emulating internal processes that would go unnoticed in the output. Whereas an FPGA re-creation attempts to reproduce the actual circuits that make a system, usually from a schematic of the system or from reverse engineering the system. I would go as far to say that software emulators are actually "simulators". But that is the topic for another blog.
In summary, software emulation can be good enough or even very good but hardly perfect. Some of MAME's emulations are very, very good rivaling that of the MiSTer. But FPGA if done right, can be the closest thing you can get a clone/replica of a system, with the behavior matching cycle by cycle, pixel by pixel exactly as the system would.