The only thing keeping Android from being completely open is the amount of blob code needed to access device-specific hardware.
This is no small barrier. To end users, it is the difference between a phone that works, and one that is broken. Reverse-engineering proprietary blobs is a tremendous bother. Who wants to put in all that effort for a phone that will be obsolete in 3 months? Essentially, if there is even one proprietary blob, the whole thing is effectively proprietary. From a practical perspective, is only marginally more open than Windows ever was.