The reason developers don't just drop directx and go opengl is because most of the current crop of programmers only know directx.
Its a choice of , do I re-learn most of what I know about graphics programming, or do I stick with what I know and make the best of it ?
The benefit of opengl is its multi-platform , it also works on almost any hardware.
Opengl allows flexibility .
If your writing a game engine and you want to support pixel shader 3.0 you can do that and someone who is using a pixel shader 2.0 card can still run the game.
What would happen though is the driver for your video card would be responsible for emulating the 3.0 support.
Depending on how well the driver works the game may or may not display correctly with the 2.0 card.
This is what MS was trying to avoid with DX. They wanted to make it so that developers did not have to concern themselves with what features a card
supported and just write the game for a standard like dx9 and any video card supporting that would run it properly.
The problem with that approach is that its all or nothing. You either comply and can run the game , or you can't. If the standard changes like dx 10.1 you are stuck
with a card that is now useless with all future dx 10.1 games even if your card was a really fast dx10 part.
As much as video cards cost now, I think its both a wasteful and a ignorant way to do a graphics api.
To completely ban a card from a dx version because it lacks a feature that may be no more than better lighting, sharper textures seems wrong.
Let the end user decide if whatever feature is important enough for them to upgrade , not MS.
A quick quote on how opengl handles hardware.
If the hardware consists only of an addressable framebuffer,
then OpenGL must be implemented almost entirely on the host CPU. More typically,
the graphics hardware may comprise varying degrees of graphics acceleration,
from a raster subsystem capable of rendering two-dimensional lines and polygons
to sophisticated floating-point processors capable of transforming and computing
on geometric data. The OpenGL implementor?s task is to provide the CPU
software interface while dividing the work for each OpenGL command between
the CPU and the graphics hardware. This division must be tailored to the available
graphics hardware to obtain optimum performance in carrying out OpenGL calls.