Hi Benjamin!
we use the PL/SQL procedure acs_object_type.create_type all the time (we're an Oracle shop) to create new object types.
We usually also use acs_object_type_table.new.
There is no Tcl API that I'm aware of. group_type::new does use the acs_object_type.create_type API so that might be a starting point. https://openacs.org/api-doc/proc-view?proc=group_type::new&source_p=1
best
Brian