1) Create the NPC as a merchant from the start, but don't have any AI packages with "offers services" apply until quest stage is reached. The problem with this is that the ability to invest in the shop is always present, which reveals things too soon.
2) Create the NPC as non-merchant and use OBSE's SetOffersXxx functions when the quest stage is reached. This leaves the NPC not offering any services, as it appears the functions don't set a merchant status, just change the range of items offered.
3) Create two separate NPC's - one merchant and one not - and swap them at the quest stage. The problem with this is making it happen seamlessly, without one obviously disappearing and the other appearing. I'd have to wait until the player leaves the cell, and do it then, but that interrupts the flow of the story.
Are there any other options I've missed? Or any ways to fix the ones I've tried? The stage is set via a dialog, so if the NPC swap can be done invisibly at the close of the dialog, I'd like to know how it's done.