The computation graph will be properly built even without any function definitions.
You could write your complete model using the functional API and Autograd will track each operation as long as you are using parameters, which require gradients.
However, if you are writing a custom nn.Module, I would still recommend to implement the forward method, as e.g. other users or libraries might rely on it.
Internally the __call__ method will call into forward, so if some users or libs use your model as:
output = model(input)

your custom function will not be called.
I assume this might be the cast for the tensorboard issue, as at some point the model might be called directly with some dummy inputs.