Alright, with some more digging, I’ve answered my questions. Despite FSoftObjectPath being the right thing, you actually can’t use it directly in the data asset for what I’m doing because the editor still forces you to use the asset selector rather than a string. Instead, you need to use a string, construct an FSoftObjectPath from that, and then construct a TSoftObjectPtr from that. Finally, you’ll need to load the asset as you normally do with a TSoftObjectPtr. If you want access to this data from blueprint, you’ll have to add UFUNCTION accessors.
As for the reference issue, this is indeed how it works. To get around this, you point the packaging system to directories where you always want to cook everything inside. Search for Additional Asset Directories to Cook in here:
This will ensure that your textures are included in the build even if they are not directly referenced.