I don't think you actually need mapped functions in this case and others above have suggested valid alternatives. However, you said you couldn't get mapped functions to work so I made an example in case you ever need to use them in the future, or your hat system gets so complex that you DO need them ( I could maybe see this being the case if the differences between hats becomes something beyond just additions to attributes).
In any case, my example also shows how I would do it, by making the hats objects each with their own attribute alteration variables (you could add booleans too). I'm assuming that even if the different hats are included in your player animations that they will still appear on the ground or in menu's, HUD, etc so that they will still be objects within the scene.
I created a family for hats and created family instance variables for all possible attribute adjustments. That way my functions can be completely generic to the specific hat type and just add all attribute values or subtract them. Since its adding and subtracting from the existing variable values you don't have to worry about any fHat vars with "0". So from my example you could just remove the function maps and call "add_Hat" and "subtract_Hat" directly. You are picking the hat to add by comparing a chosen string to the object type name of all fHats in the layout, and the subtract function picks similarly based on the vCurrentHat value.
If you didn't want a ton of separate object types for whatever reason, you could have one hat object and create all your hat types as templates in a repo and then just load them into the layout off screen somewhere. In that case you would want to identify each object instance with a hat type identifier variable, e.g. "vHatType" = "Blue" in the templates. Or, as I said above, use some of the other suggestions in the thread.
I'll be curious which way you choose to go if you want to post a final update in the future.