Such functionality is indirectly excluded by the iOS Developer Program Licence Agreement under section 3.3.4.
There it is stated that applications may only write data to an application's designated container area on the device. Therefore, the library data for ringtones cannot cannot be manipulted unless there were API to do this.
I am not sure if I'm allowed to post a direct link here, therefore use this google search to get to the document.
Actually, you can bypass iTunes with Garageband app, but as for me, it's not quite straight forward. There's another iTunes-free option though. I've been using an app – WALTR, it puts media on iOS devices, ringtones included.
So, as you can see, there's no iTunes involved. If you wanna get more details, watch the screencast, I personally found this tutorial very helpful: https://softorino.com/waltr/windows-guides/copy-m4r-ringtones-iphone-without-itunes
Hope, it helps! Cheers!
But with iTunes to add iPhone ringtones is free. You don't have to buy ringtones from iTunes, you just have to sync the ringtones you have (bought from other sources, or made yourself) through iTunes.
What I had to do was in iTunes, use "Add File to Library" (under the file menu) to add the ringtone for free , this will place it in its own Tones library (if you didn't already have one).
Then you can connect the iPhone, and there will be a specific sync tab for Tones where you can select what you added to the library and then sync it to your phone.