Ever since I found out that Cloudflare does not charge any markup on the domains you buy from them, I've decided to buy all my domains from them. They are very transparent with their pricing, and also has a notice about this increase; in their case it will go up from $9.15 to $9.77 -- which seems to check out with the sum of the registry fee plus the ICANN fee.
Yes, you have to use their DNS, which is tightly integrated with their CDN in ways that are fine for some people but others may find undesirable (e.g. they automatically obtain SSL certificates for your domains).
It’s possible you have to use their DNS servers (I haven’t checked) but I know for a fact that the rest is not mandatory, because I don’t do any of it.
It's true that you have to use their DNS, but that's it. You don't have to use their CDN (it's easy to turn off) and you don't have to use their SSL certs.
> I've heard people suggest you should split registrar and dns solution, but I don't really understand why that would be best practice.
Simplifies migration. If your DNS records are tied to the registrar, and you need to move the record (maybe selling or moving to another registrar), then you can run into a problem where the DNS records are not accessible while the name is being transferred. Not an issue if the nameserver record points somewhere else.
Anecdotally, many registrars I have worked with (including Namecheap/GoDaddy) have terrible DNS management consoles/APIs, and limited options for access control. I have also had issues with certain TLDs not being available to move to better registrars, though I'm not sure if that is still an issue. Either way, moving DNS to a separate, standard provider definitely makes things easier to manage, especially if you are working with a lot of domains across different registrars.