Kotlin does not have source types; you cannot just discard type parameters.
One option, similar to the original types, is to use stellar forecasts :
abstract class Element<S : Snapshot<*>> { }
abstract class Snapshot<E : Element<*>> { }
But you will not be able to work normally with typical elements of typical parameters.
Another option is to introduce mutual restrictions, such as:
abstract class Element<E : Element<E, S>, S : Snapshot<S, E>>() { /* ... */ }
abstract class Snapshot<S : Snapshot<S, E>, E : Element<E, S>>() { /* ... */ }
, SomeSnapshot: Snapshot<SomeSnapshot, SomeElement>, SomeElement SomeSnapshot, Element<SomeElement, SomeSnapshot>.
:
class SomeElement : Element<SomeElement, SomeSnapshot>() { /* ... */ }
class SomeSnapshot : Snapshot<SomeSnapshot, SomeElement>() { /* ... */ }