Если вы хотите изменить набор из реализации вашего класса, у вас нет другого пути, кроме как иметь два отдельных свойства с разными типами.
private val mutableProperty: MutableSet<String> = mutableSetOf()
val property: Set<String>
get() = mutableProperty
При таком подходе ваш интерфейс предоставляет набор как доступный только для чтения тип, но явное приведение (или использование из Java) в любом случае позволит изменить набор. Если вы хотите убедиться, что набор не мутирован извне, вы можете заключить его в неизменяемый набор:
val property: Set<String>
get() = Collections.unmodifiableSet(mutableProperty)
При необходимости создайте защитную копию, чтобы вызывающая сторона не увидела изменения в изменяемом наборе, или воспользуйтесь какой-либо эффективной сторонней реализацией неизменяемой коллекции.