Copy/paste is a really poor way of doing core sharing. Updates do not propagate.
It really depends on what the code is. Would you make the same argument for lists of translated resource node names? These used to exist as a library in Babble 2.2, but were intentionally not ported to Babble 3.0. Such code is very straightforward and is unlikely to require much maintenance, aside from updating for new expansions that add new resource nodes. I don't see any problem with copying and pasting this kind of stuff around.
On the other hand, LibFail is massive and pretty complex, and does require active maintenance to keep it updated with every content patch as Blizzard adds new encounters with new events that need to be monitored in various ways. It's not something that can just be copied, pasted, maybe adapted slightly, and then forgotten about until the next expansion.
It's unlikely a user would have more than one addon using this functionality â either a user is running Grid + GridStatusShield, or they're running VuhDo, or they're running something else â so I'd be in the "no separate library" camp. It's totally fine for each addon to have its own code for this, or copy/paste.