There is a way to load different portraits for existing NPCs without having to modify files in the Main module, however this is still a hacky solution.
What you need:
A texture atlasThis contains the new portrait images; this must be a DXT5 compressed DDS file.
Each icon should be 64x64. It doesn't matter how many icons it contains (it may only be one, may be more), just make sure that the image size is a multiple of 64.
The file goes to Public\Main\Assets\Textures\Icons.
A texture atlas descriptorThis contains metadata about our portraits, including the names and UV coords of the icons in the texture.
These files are in Data\Public\Main\GUI.
I haven't found a way to make these work from a separate mod, they only replace the icons if they're in the Main module.
The game loads texture atlases in lexicographical order (eg. the zzz.lsb atlas will load after portraits.lsb, so it can overwrite items in portraits.lsb).
A resource packageThis contains a list of resources (textures, phys assets, materials, ...) that the game can use.
We need this to assign an UUID to the texture; without an ID, the texture cannot be referenced from the texture atlas files!
Working example:
https://dl.dropboxusercontent.com/u/32263228/dos/PortraitOverrides.zip (replaces Arhu's portrait while in cat form)
"Mod" .pak:
https://dl.dropboxusercontent.com/u/32263228/dos/PortraitOverrides.pakEdit: If you're adding new portraits and not replacing existing ones, you don't need to modify the Main mod at all, adding those to your mod folder should work.