The point is that a tweaked OpenGL driver can directly run HLSL bytecode, or at least be fast during emulation. You must now that we don't lose mach when we transform HLSL bytecode to GLSL (that's on the CPU). Even if a game does that many times we can always do it statically (if the GPU company wants), producing 1-2gb file inside a home folder. The problem is that after the translation, the outcome GLSL bytecode isn't that good as when it is created from an OpenGL game. They mast tweak their OpenGL drivers for this job.
As for the other thing, have you even seen a shader source before? Shaders are written in a C like dialect but with limitations and distorted systems and algorithms. Distorted= When with C you have "TALE" for example (when a digit goes from the front and another comes from the back), "Distorted TALE" can be a digit goes from the front and two comes from the back. That's why a C compiler can't compile shaders and a shader compiler can't compile C programs. Also a GPU can't run C programs (except some fusion) and a CPU can't run shaders (those software rasterizers are shader emulators at the same time). The end thing is that a graphics are really much more efficient when they ASIC_ed, thats because today's games have many different things to calculate. ASICs are good only for one algorithm (like face identification), compute shaders with OpenCL (if/else type) are good. The situation we are now exists for other reasons.