Well, I'm not a C# programmer, maybe there are others that can comment your code much better.
From what I see, in nDrive_OnDoneCDInfo you commonly do not have to import all previous tracks. If you always imported the last track, this would be sufficient. Cosider what happens if you already burned 2 tracks with your example and are just about to burn a third one. Track 0 holds the original files [a,b,c], track 1 holds some more original files [d,e] plus the imported files [->a,->b,->c]. Now you want to add some files [f,g] and import track 0 and 1 to burn track 2 and get [->a,->b,->c] (from track 0), [->a,->b,->c,->d,->e] (from track 1) and finally [f,g]. So the set of files for track 2 would be [->a,->a,->b,->b,->c,->c,->d,->e,f,g], what is most likely not intended.
A comment about alteration of the imported ISO tree(s): You attempt seems to be ok for me, but beware that - until otherwise stated by the NeroAPI - you must explicitely delete (by NeroFreeIsoItem) each imported item that you remove from the final ISO tree, will say, that will not be included in NeroFreeIsoItemTree(...) since it is not chained to the ISO item tree.
About "not closing the session": You must close the session, not the whole disk. So you should add the NERO_BURN_FLAGS "NERO_BURN_FLAG_CLOSE_SESSION" to BurnIsoAudioCD, I belive like this (a c++'ers attempt):
NEROLib.NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE + NEROLib.NERO_BURN_FLAGS.NERO_BURN_FLAG_CLOSE_SESSION,
Hope this helps.