I don't think there's anything preventing other Arduino boards from running at 20 MHz. It should just be a matter of popping off the 16 MHz crystal and replacing it with a 20 MHz one.
The core hardware libraries are pretty well parameterized based upon the definition of F_CPU (CPU frequency) in the compilation process.
Although code may be parameterized based upon the definition of F_CPU, there will be things that break, particularly code that uses the hardware timers. For example, MegaServo calculates the number of timer ticks per microsecond as follows;
#define TICKS_PER_uS (clockCyclesPerMicrosecond() /
// number of timer ticks per microsecond with prescale of 8
On a 16MHz board there will be two ticks per microsecond, 8MHz has one tick per microsecond. The problem is a 20MHz board will also use two ticks because you can't have fractional ticks and the calculation rounds down. This means that if you run the current MegaServo code on a 20MHz board the pulses will be 20% shorter then they should.
This issue is fixable by adding in a fudge factor to the functions that convert to and from microseconds, but that has not been necessary so far and its not in the current code. BTW, the Arduino team is planning to use the MegaServo code in an upcoming release
The existing official arduino servo code does its calculation differently so that may be ok (but should be tested to make sure) but that code does not run on the Mega
Other code that uses hardware timers may also not run as expected, although things like a 20% error in PWM frequency may not matter in most applications.
There has been some discussion in the Arduino developers thread about optimizing the millis calculation using code that assumes the CPU frequency is evenly divisible by 8, but not sure if that will be released or not.
Anyway, don't assume that everything will work the same even if the code is parameterized with the clock frequency.