As a rule, I always introduce myself using my proper first name, "Thomas". With this I expect people to refer to me and call me by that name. However, there are a significant number of people who go ahead and refer to me by one of the various nicknames associated with my proper name - for instance, "Tom", "Tommy", or "Tom Cat". From my prospective, I consider this rude and disrespectful. I only tolerate the use of a nickname when someone is a family member or a close friend who has earned the right to call me something familial. I really don't understand it why these people think its ok. Why do these people think its ok? Why do they persist in this practice?
As @Fivesideddice notes in his comment, this may be more a question of interpersonal relationships than of language.
But to the extent that it's a language question ...
In English, or at least in American English, many names have very common short versions, called "diminutives". Like it is routine to call someone named "Thomas", "Tom" for short. This is so common that most people don't think of it as being "too personal". It's just ... normal.
If you don't like it, simply tell them, "I prefer to be called Thomas." Most people will respect this. If they don't, that's just being rude. Well, they might forget that you said this, or be so used to calling people named "Thomas", "Tom", that they do it without thinking. In that case I'd politely remind them, "Please, I really prefer to be called Thomas." If they still ignore you, they're just rude, and how you handle that is a different question.
By the way, I wouldn't give a long explanation. I certainly wouldn't say, "Only my friends call me Tom", because that implies that this person is not your friend, which could be considered rude. If you said, "Only my mother calls me Tom" or "Only my wife ...", that would be fine.