Robert,
I'm not at work for the next couple of days, so it may be a while before I get back to you.
I agree that this would best fit an approach to CSTs where the CSTs are already defined in an extension, not in a regular JAR (there's no real easy way to maken the instantiation work and get to Eclipse stuff).
To identify CSTs, I believe we now use fully qualified class names and I would suggest we maintain it that way. I think the values should be looked up by instantiating the class and asking it for the possible values, but storage in the model can remain the way it is. We already have a similar option for comboboxes with statically defined values, so it should be simple to have a "Repository" implementation for CSTs 1 and 2 (so two extensions to the same extension point, two implementation classes) and ask each one of them if they can provide values for a CST of type <FullyQualifiedName>. If so, we take the values and create a combobox. If not, we move on to the next extension.
With regards to your second question, do you mean having two fields on 1 CST that need different data? In that case I think we need Field IDs, which we don't have at the moment. However, if we allow you to specify that ID string in the @PropertyItems annotation instead of static values, I think we could make a nice match with the existing functionality and get down to the field specific level
Does this make sense for your use case?