I've drawn out the circuit I was trying to describe in words, and simulated it.
I've
NOT spent the time to optimize the values, specify the transistors (should be real easy) or check it out properly.
But it seems to simulate as intended.
Edit: I've noticed that I mis-connected the output load R5. I've corrected it, and the simulation seems unchanged. I've NOT spent the time re-pasting and updating the files for the forum.
Edit2: One mistake I've just noticed. If the output pin (which supplies the PWM signal), floats, initially while the MCU boots itself up and starts running the application software. It could attempt to turn on both the top and bottom transistors. There is probably a moral to that somewhere.
One solution is to just put a pull down resistor, between the floating output and ground, of say 1K (may need a different value). That should be high enough for the MCU to over-ride it when it turns the pin into an output and yet low enough to force it into a defined state.
Edit3: Being critical of my own circuit. Now I've seen it in the flesh (schematic). It seems to be too reliant on the MCU pin, providing output voltages very close to either exactly 5V or 0V. That WON'T necessarily happen in practice, especially if there are other things it connects to (I DON'T know what you plan for this). So it would probably be better to put in a logic "buffer" stage, to replace the early parts of this circuit. So it can cope with a much wider range of output voltages. Not easy or so straight forward, because of the positive and negative supply needs.
SORRY!.
In the following plot. The blue trace is the 0 to 5 volts, PWM signal (fed into the circuit). The Green trace is the resultant -15v to +15V output.