Actually, there are µCs with dedicated PWM hardware which can achieve timings not achievable with an FPGA.
Anyway, FPGAs are re-configurable logic devices. They contain thousands of basic digital blocks. These blocks, and the way they are connected, can be configured to behave as any digital chip you can think off.
Then can be.. whatever you can build blocks within a FPGA. Which is a lot.
An FPGA can be configured to be a CPU, a µC, a USB controller, a UART, the chip you'd like to have but doesn't exist, etc.
However, compared to dedicated chips, FPGAS are expensive, slow, have high power consumption, tend to require more components and other stuff.
So, good reasons to use a FPGA:
- There's no decent chip in the market that fits your needs and you can't afford to design your own.
- There's no decent chip in the market that fits your needs and you don't have the time to design your own.
- You could use some existing chips but it's cumbersome or poor performing.
- You need the flexibility to reconfigure your system.
So, a more practical example.
Once upon a time, we needed to control a bunch of I2C ADCs and DACs,
Since we were running out of address space, we decided to use multiple I2C buses.
Since we couldn't find any µC with enough I2C masters, we used an FPGA and implemented a design with a 8051 µC and several I2C masters to fit our needs.
Problem solved.