I just finished writing a new library that makes it simple to apply text formatting, like underline or bold, to text displayed on a character LCD.
Here's a picture to show what I mean:
The github is here: GitHub - AJMansfield/LcdEffects: Arduino library for doing character effects on LCDs
The basic principle is fairly simple (although the implementation is not). You pass it a string, it looks up each character to get the correct glyph, applies a transformation to the glyph, registers it as a custom character, and replaces the character in the string with the correct control code to generate that custom character.
The library also caches the characters it has used, so if a string contains a lot of duplicate characters, it will map them all to the same custom character. This can be disabled though, in case you need to use it on a project that is already cpu-bound, by defining CACHE_CUSTOM_CHARS false.
The library currently only implements the A00 character ROM from the HD44780 LCD controller, but the code is written in a way that should make it very easy to add other character sets (the A02 ROM would be an obvious choice), or even add an entire custom font.
I still need to write up a proper README for the project, but all the classes and public functions have comments describing what they do, and I have two examples showing how to use the library.