The issue with an ISR-based approach is that it's an interrupt. It interrupts things.
Using the built-in timer compare match features to toggle a match pin is done completely in hardware. You can have code running on the processor and it has no idea that the timer is toggling the pin.
When you use an ISR to toggle a pin, you have more flexibility (you can do more than just toggle a pin, and you can toggle whichever pin you want), but you now have lots of interrupts, interrupting your code. This can upset timing-specific routines, or, at high frequencies, incur unnecessary overhead (your interrupt can become a large portion of the overall instruction count, eating away at cycles that could be used by the main program).
Which one would generate more accurate pulses?
The timer match feature will likely generate more accurate output, unless you are very careful when programming your interrupts. In fact, to get accurate PWM/pulses with ISRs, you'll probably need to write your ISRs in assembly so that you have know how many cycles they take, and then account for this in your code that sets the timings. Basically, the overhead of entering the ISR is going to affect things, timing-wise.
In general, if it's possible to do what you want to do with the timer match pins, do it that way so you don't have the extra interrupt overhead. If it's not possible to accomplish what you need with the timers alone or you've run out of timer pins, then use an ISR.