I was wondering what's in the name table (and similarly the import and export tables) in UnPackage.cpp. I know that this probably sounds dumb, but I just found where in the code the name table was finished loading at (or at least, where it appears to me that it's finished loading) and I printed out the contents. It looks like a bunch of non ascii characters, so I was just wondering what's in there and how it's supposed to be interpreted.
Name table is not a part of pak, it's part of package (uasset). It contains strings which are used in the engine's FName objects, which are used nearly everywhere. It is typically ASCII, but some Asian developers seems has people who doesn't know English, so they use national language there. UModel doesn't support Unicode anywhere, so characters are replaced.
I was also wondering how the pak structure changes between engine versions. I know you said to check out the pack project in UE4 source, so I was wondering if it was changed at all from previous versions (I'm interested in working with Bioshock and Bioshock Infinite, which I know were modified versions of UE2 and 3 respectively). Finally, I was wondering where this project is found/ which files it encompasses. I've searched the directories of my UE4 source and found the files PakFileUtilities.cpp (and .h) and PakFileDerivedDataBackend.cpp (and .h) as well as a few C# files but I'm very new to working on Unreal in this way and am unsure where to start.
For pak file versions - see PakFile_Version_... constants. In UModel I've added comments saying which UE4 version received that update.
Bioshock is not using pak files, so if you're interested only in this game, you have no point to read UE4 pak file code.
For Bioshock-specific code, you may search for "Bioshock" string everywhere in UModel/Unreal directory, to see how it differs from original UE2/UE3. Actually, for Bioshock 1 and 2, there are a lot of changes, and much less for Bioshock 3.