Android often simply uses the standard kernel device interfaces (whenever possible, actually), for example using the stock input/event drivers.
The HAL libraries are intended to cover situations where there isn't a clear, simple, and uniform kernel interface for something, or where the subsystem in question tends to be highly device-specific and oem-customized.
For example, some devices use an audio HAL which interacts directly with the kernel ALSA drivers (using a thing wrapper library called tinyalsa), some devices use non-standard audio drivers (like the original G1) but still have an open source audio HAL, some vendors (for reason I don't quite follow) ship with closed audio HALs, and some vendors (I believe) use an audio HAL that wraps the lgpl libalsa.
Vendors are welcome to use whatever license they like for these modules. They are neither required to be open source no required not to be (though we try to make as much open source as possible for the lead "Nexus" devices and prefer solutions that allow for that).
The Android HAL module interfaces are being cleaned up over time, sometimes being eliminated in favor of a new standardized kernel interfaces, sometimes being expanded to allow for new functionality. They'll continue to evolve.