Take a look at this source file and you can see which RPi pins support PWM in Pi4J.
Pi4J only supports hardware enabled PWM pins. It does not emulate or use softPWM for Pi4J provisioned pin objects.
As for the MCP23S17, I don't think there is any Pi4J supported method to use softPWM.
Depending on your application softPWM may not may not be sufficient. The timing cannot be guaranteed on a non real time OS.
Alternatively or if you need more PWM pins that what the RPi hardware natively supports, you could use a real PWM expander chip.
Pi4J includes support for the PCA9685 chip.
Here is a dev board with this chip on Adafruit:
Here is an example program using the Pi4J PCA9685 expander: