Windows has quite some compatibility layers (it's pretty impressive) and applications usually don't rely on system libraries, but ship their own if possible.
Still there are plently of examples of programs which do not run on Windows 9x or even 2000 anymore, because they rely on features only available in newer versions. (And this is only partly a political decision.)
aMule uses wxWidgets and there are more than enough bug fixes and new features, which are not available in older versions, to justify using the new version and dropping support for old ones.
Code which works with multiple versions gets really ugly and very complicated over the time, as you have to add mulitple versions of a routine for different API versions.
An easy example: In wxWidgets 2.6 there's a function wxImage.Ok(), in wx 2.8 wxImage.IsOk(). We need this function to check if an image was loaded properly.
Now if we want to support wx 2.6 and wx 2.8, we either have to use a wrapper function or #defines to call the right function for the library version.
This is only a very easy example, but I think you might understand what's the problem with compatibility. We don't want to win an obfuscated c++ competition, but have well understandable code.