* means that the code is compiled in, and statically available in the kernel all the time, while M means that at least some (usually all) of the code for that option resides on disk as a module.
Modules are often used in your distribution's default kernel, since they take up much less space in memory when not being used, while still allowing a good range of hardware to be supported. There are also advantages as you don't need to reboot the system to change any module settings (or even to change and reload the module code).
In general, if a module is compiled in then it will load faster than a module, and you may also save a few bytes of memory space (as you don't need to load the code to load the module).
I don't know why your driver wouldn't show when it was compiled in. It's possible that the new kernel wasn't installed properly, or even that the computer wasn't rebooted, or that there is some difference between the module and the compiled-in driver that prevented your device from being recognised. Without more information it's hard to tell.