At what point does the backwards compatibility of blender break, and for what features? I know if I open a 2.49 blend file in 2.7x it will not have the animation data. I heard that 2.7x would break some features of old blender files, so is there a list anywhere of feature compatibility?
The mesh format has changed. 2.6+ uses BMesh and allows for N-gons (i.e. polygons with more than 4 vertices). 2.49 has only quads. If you don't save with Save Legacy option, you will get only edges, no polygons! N-gons will be deleted in 2.49.
The whole API, interface and the major version of Python have changed. No scripts are compatible between 2.5+ and 2.49. (Still, I'm suprised how many 2.x concepts in the API were considered good and made its way further to 2.5+ )
Linked libraries between 2.6+ files actually work in 2.49! You can append and link things from 2.6+ files :)
Many new modifiers were introduced in 2.6+. If used, you won't get any 'Unknown' warning in 2.49. No, they will be anihillated instead. The same is (sadly) true about new types of nodes...
Names (of objects, materials) in 2.49 have length limits: 16 characters plus the .001 suffix. Also, no international characters are allowed. If you leave a long name in a 2.6+ file, it will end with  symbol in 2.49. Editing such name in UI and pressing Enter will 'normalize' it.
2.6+ has no options per polygon (mostly game-related, but not only: like Collision, Invisible, alpha blending mode). In 2.6+ you need to set them per material and use "Blender Game" as the rendering engine. 2.49 will not recognize these settings. Also, 2.6+ will break the per-face mode (a bit field). You have to reset the bit field first:
polygon.mode = 5
to be able to use bitwise operations again, like:
polygon.mode &= ~(Mesh.FaceModes.INVISIBLE)
You will need these operations to recover per-polygon flags with Python.
2.6+ names new UV channels "UVMap" by default, while 2.49 uses "UVTex". It's not an actual compatibility issue, but remember to name the two objects' channels identically before you join them (Ctrl+J). Otherwise, you will lose UV mapping on one of the objects!
The compatibility is quite good IMO :) taking into consideration how much has changed since 2.49.
What you're talking about is forward compatibility. Backward compatibility is the ability to open files in older versions of the product.
The release notes should give you a hint as to both, but it's always safest to assume neither exists.
AFAIK the Blender team doesn't guarantee either between even minor releases, let along the large step from the 2.4 branch to the 2.7 branch.