I made blueprintable components. One was Pain_Dealer second Pain_receptor. Added blueprint interface to both.
When bullet (or projectile or hitscan) weapon hit target it checked if target has PainReceptor. Then information about damage types was sent over as array of struct (damage type enum and amount).
I think while default damage system from epic is robust, I need more control over how that all works.
Next upgrade for that system was adding Yet another blueprintable component to static meshes that were meant to be destructible (had set tag “I_am_destructible”), this way only meshes that player shoot and could be damaged (by level design were) damageable.
If you set everything to work with multiple damage types to be sent over you can always send array of single damage type, just more flexible setup.