Minidrivers abstract the actual smart cards so that applications can all talk to them using a common interface. Your app doesn't even need to know nor care about which smartcard it's talking to, or whether it's really a smartcard or a big networked HSM, assuming it accesses the card through the standard interface and not talk directly to the card. Here's a good example from Microsoft themselves, as you can see the RsaCryptoServiceProvider can be used the same way no matter which card is behind it, because the minidriver provides a Cryptographic Service Provider that abstracts the card.
The right minidriver should automatically be installed via Windows Update, assuming the manufacturer submitted their minidriver there. I'm not sure which manufacturers bothered to do this in practice though. But yes, in theory nothing prevents you from bundling a lot of minidrivers with you app and installing them in advance.
CCID is a standard to talk to USB smart card readers, its sole job is to relay APDUs (commands) between the computer and the smart card reader. Basically the minidriver translates from high-level crypto functions into low-level APDUs (which are card-specific) and then passes them on to the reader via CCID.