This doesn't help you today, but coming up in IC 3.0 SU11 the Interaction Client will support the "callto:" protocol. This means that your CRM application could just execute the command line "callto:[number]" and any existing instance of the .NET client will dial that number, or if a client instance isn't running it will be started and will dial after the user logs in.
As for your options today, to make this work better, you could do a few things:
1. Use IceLib's "CommonCredentials" class (ININ.IceLib.Connection.CommonCredentials) to retrieve the login settings used by the .NET client. For this to work without requiring to prompt the user for login information, the user must select to save their password in the .NET client login dialog, or use Windows authentication. (Note that you can use this class to persist the login information for your custom application also - if you do take an approach that caches the information.)
2. Create a "singleton" application - the first time your app is launched, log in and dial the number. Then, instead of exiting, leave the app running in memory (with no user interface, of course). Next time the app is launched, have the new instance just "activate" the existing one and pass the dial string to it. This is similar to how our Interaction Voicemail Player works, for similar reasons that you're working on solving as well.
Either way, good luck!