I favor software solution with a buffer slightly over shifting with hardware and then rewriting content that is not changing. If you expand to a larger display such as 20x4, and you still want a particular line to scroll or shift, then it's much easier to use a buffer. You can write a subroutine to do scroll on any line (with separate buffers). Then trying to use hardware shift will be awkward with rewriting 3 lines that are not moving. When using buffers, make sure you fill them with space characters first. With buffers, you can do lots of fancy stuff, such as expanding from center:
W!
Wee!
Welme!
Welcome!