Most, if not all, new 16x1 displays are really 8x2 displays. Rather than addressing from 00 - 15, they address from 00-07,40-47 which makes using them awkward. Having to support both types with the same code is difficult especially if scrolling is needed.
Some of this has been done in the LiquidCrystal440library where the problem is described thusly:
Crazy 8 Addressing 16x1 LCDs often have an unusual address layout; these modules often have two 8 character halves and work best with this software if you declare them as lcd.begin(8,2); if you do that, then you can print(“abcdefghilklmno”); and have all the characters appear as you would like across the screen. If you use any of the scrolling commands, the bizarre addressing of these modules will manifest itself. For details follow the LCD Addressing link at web.alfredstate.edu/weimandn