Hello,
If you wanted to use the syntax language in an app with UI and in an app/server without UI, you would need to have two separate classification type providers. You would pass the one to use (based on the calling app) into the syntax language's constructor, which would need to have a parameter that is the classification type provider interface (e.g., IMyLanguageClassificationTypeProvider).
The Language Designer generates the interface and the UI-dependent version. The non-UI-dependent version that would you write could be a simple class that implements the interface and returns ClassificationType instances for the properties.
If you were looking for an example of some separation, our premium add-ons like the .NET Languages Add-on have two libraries, one that is named with Text in the name and has no UI dependencies and another with SyntaxEditor in the name that is UI-dependent. Our syntax language and classification type provider is defined in the latter. Core language services are defined in the former.