The analysis below applies to Generation 9 competitive Pokemon (and potentially future generations), although certain elements have been introduced in earlier generations and thus can be applied there.
As the better overall Pokemon, Feraligatr is definitely better, although Milotic has its merits.
Feraligatr's strength is due to it being a strong Dragon Dance Pokemon with access to strong coverage moves while being decently bulky. Yes, it isn't the fastest Dragon Dance out there, but it can definitely live one or two hits while setting up. Another unique trait is having both Swords Dance and Aqua Jet, making it a great anti-offense choice. For coverage, Feraligatr's Sheer Force ability in conjunction with Life Orb grants unholy power to the likes of STAB Liquidation, Crunch, Ice Punch, and Rock Slide, as well as having the always reliable Earthquake, even if it isn't Sheer Force boosted.
Milotic is a great defensive Pokemon with access to annoying moves like Scald, Haze, and of course, Recover, but that doesn't make it excel in the way that Feraligatr does. Sure, it's solid, but at the end of the day it is too passive. Despite having Scald to shore up it's lower Defense stat (it is actually physicall frailer than Feraligatr in terms of stats alone), Scald is not guaranteed to burn, and with Rillaboom being such a prominent Pokemon along with other threats like Iron Hands, Serperior, and Ogerpon, Milotic struggles to find a place as a good defensive Pokemon. Case in point, Suicune, possibly a better version of Milotic in every way, shape, and form, is also struggling right now, with both it and Feraligatr being banned from NU yet having no place in RU. Recover also got nerfed this generation, going from 16 PP to 8, and Milotic lost Toxic, making it even more passive and having to rely on Scald and maybe Ice Beam for damage. All in all, Milotic just isn't able to perform its defensive duties as well, leaving Feraligatr to be the better choice.