Внутреннее ключевое слово отлично работает, если вы не хотите, чтобы ваши классы были доступны как для COM, так и для .NET вне вашей сборки.
Однако, если вы хотите более точный контроль над тем, что вы предоставляете COM, способ сделать это - оставить ваши классы общедоступными, снимите флажок «Сделать сборку COM видимой» в свойствах проекта (которая изменяет AssemblyInfo.cs под обложками), а затем добавьте атрибут к классу, который вы хотите представить в COM. Примерно так:
[Guid("12338758-70B4-40B7-75FA-50300015DAC9")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyClassToExpose