Hi Maximus I thought I’d try and answer your question.
#1 is very computationally expensive and increasingly unnecessary.  The question is how much is your data like the data the model was trained on. But even for very different domain data than BERT was originally trained on, e.g. Movie reviews, fine-tuning can have more than sufficient results: https://arxiv.org/pdf/1905.05583.pdf
In addition, there are tons of models on HF that have now been fine-tuned, possibly on data similar to yours, that you should check out before you consider pre-training the entire transformer yourself, even if you have those resources available, imo. Models - Hugging Face
#2 doesn’t really make sense to me. Fine-tuning implies adding a supervised layer to make the otherwise unsupervised model learn the task you want. In this process, the same previous layers are active and the masking and next-sentence self-attention mechanisms still occur, just now on your data, and with an added component to minimize the loss from the difference between its outputs and your labels. So I think maybe #2 and #3 are the same thing.
w/r/t the question of adding features. You have it correct. You can’t add features to the transformers themselves and try and fine-tune because they are language models. Put another way, it just doesn’t makes sense to try and learn the masked token in a sentence if the masked token is the length of the sentence or whatever. But yes, you can take the trained model and use it to encode your data, then add a dimension or however many you want, to add features for some other model that will do something with those - regression or gbm or svm or something with sklearn.  Oh and yes I would normalize all of your features for such a model.
Hope that helps!