HD44780 is a prime example of technology which is implemented so simply and in "directly usable" way that, usually, it takes a lot more time to find a library, find out how it works, assess whether it's usable at all (libraries often tend to be completely broken by design), and then, finally, be able to do something with it - than what it takes just to directly write your code - call it a library if you want, but it's usually just a few lines.
This is not surprising: HD44780 is an old school "bus" device that
directly accepts data and just does what you tell it to do, so kinda plug&play. At that time, it wasn't common to think in the modern stupid "hardware abstraction middleware driver blah blah" way
. With today's complexity often requiring that, we have forgotten it doesn't always need to be that way.
As a semi-noob, when I first time interfaced with HD44780 in 2005, I spent only one (1) HOUR to actually write
everything myself. This is because HD44780 interfacing is about 10 to 20 lines of code, all extremely trivial and well documented. I found this a lot easier than basic MCU things like intializing an AVR timer/counter to produce PWM, which took several hours the first time to get right
.