Although the PWM functionality exposed by the Arduino analogWrite() function is fixed frequency, the underlying hardware PWM is not. e.g. on ATmega328P based Arduinos, if you take direct control of the Timer 1 registers, you can set up a PWM with a frequency ranging from 0.12Hz to over 1MHz. See section 20. TC1 - 16-bit Timer/Counter1 with PWM, of the ATmega328P's datasheet.
Ardunos based on other MCUs generally have fairly similar capabilities although the limits of their hardware PWM frequency range will be different - consult the specific MCU's datasheet for details.