Well, you certainly need to keep a channel structure for the past channels just like for regular channels. OpenMPT just has a huge (well, 256 entries) array of channel structures, the first N channels are always for regular channels, and if a channel needs to go virtual, a free channel from the remaining 256 - N channel structs is selected and the original data is copied over.
OpenMPT essentially uses virtual channels for anti-click as you describe it, but anything like that is probably not the best solution because, well, the channel keeps playing for longer than it should, which can lead to bleeding notes.
Keep in mind that your channel structures should always be pre-allocated (so you need a maximum number of allowed virtual channels), because allocating memory during mix time is always a bad idea if you want realtime playback.