Having lots of experience with software development, my guess is no effort is put in to keeping thing from working together... It's quite the opposite, there's usually some work necessary to get each variant of some product family to work with something new.
Often the reason is technically trivial, like adding the new device to places in the code that get the model or some other identifier, and then make some sort of choice as to what code to execute. It can point to exactly the same code to execute as for an already supported model, but the branching code must be updated to do that. See the "switch" statement in Java.
Depending on the design of the code, there may be many of these, so the engineering effort to support a new model of something can be non-trivial, even if the code to implement that support is trivial.