I've started working on something along these lines now. Rather than trying to make a soft-synth from the ground up, I'm putting together a tool that will let you load an XM file and replace the samples with synth sounds. The replayer will generate the sounds in realtime and feed them into the replayer. Hopefully, this will provide the flexibility of XM with some nice sounding synth voices. It's early days, so this may well come crashing down around my ears soon

I'm putting together the GUI in managed C++ / C++ .Net; so I can then call the standard C/C++ replayer and synth code easily. Getting managed and unmanaged code to play nicely together has given me quite a headache but I've finally got the two playing reasonably nicely together! I have a Winforms app that lets you load an XM with a file-browser and play it, so I'm getting somewhere...
Not sure how useful the finished product will be but I'm sure to learn a lot during its development. My primary goal at the moment is being able to easily jazz up old XM tunes for use in intros and make them smaller at the same time (due to having no stored samples anymore). Hopefully I'll be able to come up with a friendly GUI that makes it easy to replace the samples with synth sounds (side by side comparison etc). I'm using MiniFmod as a base and will modify that as I go along to fit in the synth stuff.
Ideally I'd like to be able to detect (roughly) the type of sample (drum, hi-hat, lead etc) and auto-generate something similar automatically. This may be a pipe dream though. Hopefully I can at least detect the pitch of the source sample in most cases and match that with the generated synth voice.
I came across Protrekkr earlier which seems to do exactly what my eventual grand plan was (fasttracker style app with in-built synth), which looks very nice if a little confusing.
Anyway, enough rambling for now

raizor