Not entirely true. Yes compilers can automatically take take advantage of AVX instructions when compiling, but it is difficult for that kind of auto vectorization, so hard in fact that it is still an active area of research. In reality without the programmer using intrinsics or inline assembler AVX may not be included in the program at all. And then there's the issue of CPU dispatching, where you have to check if the OS and CPU support AVX and then select the AVX code path. It not nearly as simple a selecting a compiler switch.
As to the operating system support. The reason why previous versions didn't support AVX has nothing to do with the instructions being built in to the OS. The problem has to do with context switches between threads. When the operating system switches from one thread to another it first has to save the state of the first thread. This means that the first thread is paused and then the contents of all the registers must be saved to memory and then the second thread's registers are then loaded from memory and then the second thread is restarted. That a little simplified, but that's basically what happens.
The problem stems from the fact that the the operating context switching code didn't save the state of the AVX registers between context switches in the past. If you used the AVX registers in Windows 7 before this update what could happen is that you would have data in the AVX registers and then a context switch would happen, your data wouldn't be saved and the other thread would screw up your data. Then your thread would resume and you would continue using the data in the AVX registers that was corrupted by the previous thread. Congratulations, you just corrupted data.