I propose that a method to force load skin data would be added in the SkullMeta class. Because as of now, if you set the Owner to one that has not yet been loaded, it will simply display as the default skin. The only way to currently correct this is to either use NMS or to place the skull down in the World.
What I suggest is adding a method to the SkullMeta class to force load the skin data if it's not already present. This could be done (in 1.12.1) using the TileEntitySkull#b(GameProfile, Predicate) method. I understand there would be complications due to the fact that the data is loaded async, but maybe a callback system could be implemented?