A DAC (with a parallel interface) can be given a new sample every few instructions, the sample can be 8, 10, 12 bits or whatever. Upto several 100,000 samples per second is reasonably straightforward.
With PWM you get a sample every cycle of the PWM and the cycletime is 2^(sample size).
So for 8 bit output at 10,000 samples per second you need 2,560,000Hz clock for the PWM. Moving to 16 bit samples would need 655MHz clock, 16 bit samples at 48kHz would need over 3GHz clock.
So for large numbers of bits per sample PWM gets unwieldy. However a parallel DAC is also unwieldy for the Arduino as it doesn't have lots of spare pins to use. For a synthesizer I expect at least 12 bits is a requirement.
SPI is thus perhaps the best interface for a DAC on the Arduino since the hardware runs to 8Mb/s max and is easy to drive.
If you are happy for only 8 bit accuracy then PWM is reasonable alternative. An R-2R ladder is also attractive (less low-pass filtering needed, but 8 pins used up).
For real-world audio ADCs and DACs these days sigma-delta converters rule - usually using the I2S bus or similar which is a bit beyond the capabilities of the ATmega processors to drive alas.