> 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 that
can 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