The problem with compatibility is Joomla! is a delicate one.
The Joomla! platform / API is evolving all the time (especially between LTS releases like 1.5 and 2.5), so classes / functions are changed or deprecated and later removed. New things are added and so on.
For developers is possible to maintaing a component under different versions (I am not saying it's easy), but they need to know what has changed in the API.
Also constructs like (in pseudocode)
if (Joomla! version == 1.5) then do this else do that
.
are used to make sure some parts of the code are used only in a specific version.
To better understand what is going on have a look at:
Potential backward compatibility issues in Joomla 3.0
You you easily see:
- Renamed classes
- Removed classes
- etc.