Sinatra has taken an approach of having only the most useful components needed to build applications out of the box. It has simple routes along with a Domain Specific Language over a Rack layer.
Because it's rather small and minimalistic, scaling up is not very easy with Sinatra. You need a great deal of knowledge on libraries and modules that may be useful for your particular use-case. As your application grows larger it may be hard to keep things clean and minimalistic, losing a lot of the advantages that Sinatra has.
Rack is great at separating the different stages of a request, allowing developers to easily follow separation of concerns, a key goal for any well designed software.
Rack is a very bare-bones middleware useful for easily creating REST APIs without too many bells and whistles. As such, it may prove useless to build a complex web application that relies on the backend for most of its operations with Rack.