and how come underline works just fine?
Because Pd's loader mechanism searches for the symbol "${libname}_setup", where "${libname}" is the name of the library being loaded. If you make sure that "${libname}" is drawn from the set of characters thatcan appear in a C function name, then users will be able to load your object in all the ways that Pd provides (using declare, using an absolute path name, etc.) If instead you use characters that cannot appear in a C function name, you either limit the ways that users can load that library or require complicated workarounds like hexloader in order to make the library generally loadable.
What other easy options do I have besides "_"?
Why do you want to avoid using an underscore? -Jonathan