Just think about the following scenario:
You have a nVidia graphics card that supports GL 3.1, and you link against your great new OpenGL_3_1.dll. Of course you want your program to run with other cards, too, so you want to code a fallback path for older versions.
But what happens when a customer of you has a card that doesn’t support GL 3.1? When starting the program, a cryptic error message with something like “OpenGL_3_1.dll not found” pops up, and the customer thinks, “stupid software, this thing is broken”. Your code won’t even start, you have no chance to revert to a fallback path.
Now you might argue: But I have a minimum hardware requirement of OpenGL 3.1. My software is not supposed to run on anything less. First of all that’s not a realistic scenario, but let’s just for the sake of the argument assume you really want to do this in a commercial software.
Ok, so you write a software that links against OpenGL_3_1.dll, and your customer has a card capable of OpenGL 3.1. But your customer doesn’t have the latest driver installed. On starting the program, instead of a descriptive error message telling the user to download and install a new driver, the error “OpenGL_3_1.dll not found” pops up. And again the customer thinks “stupid software, this thing is broken”.