The standard operator registration should work. Something like:
static auto registry = torch::RegisterOperators().op("aten::selu", torch::RegisterOperators::options()
   .kernel(DispatchKey::PrivateUse1, &your_selu_implementation)
);

We’re currently thinking about a redesign that might make autograd for these cases easier in the future, but for now it’s complicated. You could try and follow what XLA is doing. I’ll get back to you.