I agree with everything Dean said.
I developed a decent size app using Shiny that we launched and had a fair number of users. However, I eventually ended up re-writing it using a backend web framework and modern JS libraries & tools (npm, Vue, etc.) because I was making Shiny do things it didn't naturally do well, which was causing a lot of pain. Most of this was related to data input, creation, and validation, but also managing resources like JS/stylesheets. I probably could make Shiny do it all but it clearly wasn't the best tool for the job when it came to having a more full-fledged web app.
On a side note, development in Shiny is REALLY fast for data visualization and using JS charting libraries instead of ggplot2 feel to me me like the 2nd circle of hell.
All the modern web frameworks (e.g., Django, Ruby on Rails, Symfony, Laravel) have a ton of tools to help manage assets (css, js), routing, forms, security, database, state/sessions, load balancing, etc. With Shiny/open source shiny server, you need to put a lot of square pegs in round holes to get done what is a piece of cake using those tools. The Pro versions can help with some of those issues but not all.
For example, like Dean said, the solution using Shiny to having multiple pages for an app is to create a bunch of mini apps and string them together. It's not impossible. But it can feel unnatural. However, creating a single dashboard to report on a single dataset is almost trivial in Shiny compared to how much work it might take using a web framework.
Erik