Part of my reasoning for asking about a separate C module name is that I intend for the C module to be useable with any programming language, through a binding layer (XS in Perl 5's case, ? in Parrot's case), much as GD or libXML are. So, are there any pure C modules that have ':' in their names? Or that could be a non-issue. For that matter, are C library names usually the same as their compiled file names? If I used SQL::ObjectModel for the Perl name, then SQLObjModel perhaps might work for a C name?
I believe the convention is for the portable C library to be named something short like libSQLOM, with the Perl code either in SQL::ObjectModel or a related namespace like SQL::ObjectModelXS or SQL::ObjectModel::libSQLOM.
What if I were to keep the previous name (not yet registered) of 'SQL::ObjectModel' for the module itself, and use 'Abstract Syntax Tree' in the description?
Consider this guidance from perlmodlib: "Generally the name should reflect what is special about what the module does rather than how it does it."
The name you pick should focus on the distinct purpose of the module -- ie, providing a static representation of various kinds of SQL statements.
The fact that your module is implemented as a tree of objects, rather than as functions which operate on nested hash-refs or whatever, is an implementation detail. In practice, many of the modules on CPAN are based on some kind of "object model," but don't use it in their class names -- for example, think of the many distributions that could have been named "XML::ObjectModel."
-Simon