You are absolutely right. When you need to contract dates, Kanban may be a little risky in the beginning.
Kanban works based on the team's history. With that, you can predict how much time it will take to deliver X number of features.
With Scrum, that number is more comfortable to give, since it has time-based releases. However, most of the time (from my experience), those estimations that we gave were not much more than hard guesses.
As Robert said, once you've been working with Kanban for a while, you have the team's metrics. You know with X% certainty (we use 85%) how much time it takes to have a feature live.
I use this by working in a proprietary product. But that product often needs new features that are required by external clients, and obviously, we need to compromise when we release something. I guess I'm a little bit in the between of the two options :)
Thank you for your reply!