rmt_translator_set_context can be used to set a "user context" for a specific RMT channel. This means that the void* you pass as the user context can be used for anything your custom translator callback may need as "contextual" information to perform its job. In the callback, you'd then use rmt_translator_get_context to retrieve the pointer/value you previously set for the channel that is currently calling your translator.
So,
It is needed to transmit data using the RMT controller?
No.
How does it interact with the other RMT functions and structures?
It doesn't.
It just allows you to use the same translator function for different channels at the same time and perform the translation according to different contexts you set for different channels, i.e. it allows the translator to be stateful w.r.t. each channel. If your translator callback doesn't need this kind of context information you can just ignore the set_context and get_context functions.