Alright ladies and gentlemen; a short guide to point you in the right direction, for as much time as I have today. If this is still super-confusing I'll try to get some pictures and be more specific. As I said before, I'm going to assume these principles would apply to any script file, but the one I used was STR_NNpc_name.umsbt found in the Script/Str folder of RomFS.
The structure of the file starts off with a large chunk of data that includes the villager code references. I'm not sure what this does, I tried to swap two of them and it broke their names entirely. Anyway, beyond that is a large zero set, and then at offset 288E starts another chunk of data that includes the villager names. If you're editing the US English names, this is where you want to be. The large group preceding the actual names is in fact references to where each name starts. However, they don't have any actual reference to the file in hex that I can tell, so they're basically internal pointers that you have to edit relative to each other. The pointers are two bytes, separated by 3 "00" bytes each. The first name "Cyrano" has the address 0C 07. If you look at the pattern of numbers, you can find that the address works as "Small Address" "Large Address" In other words the first byte increments from 00 to FF, at which point the second byte increments by 1.
Now, the decimal difference between one address and the next tells you how many bytes that name is allotted. Looking at the first two addresses, 1A minus 0C gives you 14 in decimal, and since the first name is Cyrano, that makes sense, as each name is allotted twice as many bytes as letters in the name, plus 2.
Okay, fair enough. But there's a monkey in the mix. Notice that some names have extra blanks after them? Well, each extra set of two bytes following the names also has an address in the table at the start here. So you can't just count off names and count down the addresses. You have to count the extra blanks as well to find the address of the name you want to expand. I used a spreadsheet with some repeated formulas to work this all out.
THEN, once you know the offset of the name you want to expand you're ready to go. Add in as many bytes as you need to finish the name (Remember you need 2 bytes for each extra letter). Now, you need to increase the offset for each FOLLOWING entry by the number of bytes you added. How far you have to go in doing this depends on what you want to do exactly, you have some options...
1 - shorten another name later in the list to balance out (remember to delete the same number of bytes later on, not just "00" the characters).
2 - come to one of the gaps with blank entries and delete enough bytes to balance out (as far as I can tell, the blank entries are not used, so it doesn't matter where they reference exactly and it's okay if a previous name overlaps them some)
3 - just increase the pointers until the end of the list.
I should point out that this same technique works in Happy Home Designer, except that (2) is not an option since it has no empty entries.
Hope this helps someone else! Feel free to ask for clarification