Actually, I think that the major difference is in how you program for CPU's and GPU's. Quite simply, with a GPU, low-level management of the core architecture is hidden from the programmer, while with a CPU, everything is exposed.
Because of the fact that programmers have control over extremely low-level details of the CPU, the manufacturers must release the low-level details of the architecture.
But with a GPU, the more or less standardized nature of the programming interfaces mean that only the drivers need low-level control over the GPU, meaning only driver developers need to know the low-level details. These companies would really rather not release anything that they don't have to.