Ran into several dead ends while looking to do this exact thing, but I figured out a solution, so I figured I'd come back to help anyone with the same problem:
Things you'll need beforehand: A quest, an alias for the character you're trying to dress up, and an outfit.
Step 1: Make this script:
ScriptName This-is-where-your-script-ID-goes extends Quest
ReferenceAlias Property This-is-your-NPC's-Alias Auto
Outfit Property This-is-the-outfit-ID Auto
Function Make-up-a-name (Actor This-is-your-NPC's-ID)
This-is-your-NPC's-ID.SetOutfit(This-is-the-outfit-ID)
EndFunction
Here's my own as an example:
ScriptName MS05NellieFugitive extends Quest
ReferenceAlias Property Cirinel Auto
Outfit Property MS05NellieFugitiveGarb Auto
Function EquipHood (Actor MS05NellieFollower)
;Nellie wears a hooded robe
MS05NellieFollower.SetOutfit(MS05NellieFugitiveGarb)
EndFunction
Step 2: Go to the "Scripts" tab of your relevant quest and add the script you just made.
Step 3: Click the script, hit "Properties," then "Auto-Fill All." There should only be two properties and they should both auto-fill fine, but in case they don't, your first property is going to have your quest ID from the "Pick Quest" dropdown menu and your character's alias from the "Pick Alias" dropdown menu, and your second property is going to have your outfit ID from the "Pick Object" dropdown menu.
Step 4: Go to your quest stages and either create a stage to attach this to, or pick a stage you've already made that you want this to happen during. For example, if I want my NPC to change clothes after she's been given a potion, I pick the stage that involves the potion-giving. If, however, I want my NPC to change clothes after I dismiss her as a follower, since that doesn't have a quest stage assigned, I'd have to make one up.
Step 5: If your quest stage doesn't have a log entry already, make one. You can leave it empty. Click that log entry and the Papyrus Fragment window should light up as editable. You want to go to "kmyQuest" dropdown menu and pick the name of the script.
Step 6: Put this into the Papyrus Fragment window:
kmyQuest.This-is-the-function-name-you-made-up(Alias_This-is-your-NPC's-Alias.GetActorRef())
Here's mine for the script from Step 1:
kmyQuest.EquipHood(Alias_Cirinel.GetActorRef())
Step 7: Hit compile.
Step 8: Pick whatever dialogue you want this to happen with and attach this in the relevant Papyrus Fragment box:
GetOwningQuest().SetStage(This-is-the-stage-number-you-attached-the-script-to)
Here's mine, for Stage 50:
GetOwningQuest().SetStage(50)
Step 9: Hit compile.
Step 10: Save, and you're done!
Note: I'm a novice at all of this, so I don't know if the "conditional" tag at the top of the script is necessary, but it hasn't caused me any problems.
EDIT: Removed "conditional" flag, it's not necessary.