I completely agree with you Justin. That is my own experience too. The lessons I have learnt from stepping a bit outside WordPress and experimenting with other frameworks are mainly two (which I wrote about here and here):

Rely on Composer to set-up the management of your project, and treat WordPress just as another dependency (then, if you want to use Laravel's Blade, it's just a line of configuration code to import it)
Interact with the CMS exclusively through interfaces ("Code against interfaces, not implementations"). Then, the logic of your application can be reused for other frameworks with minimal effort. I'd say that around 90% of the application code is business logic, and only 10% is CMS-specific logic... so only that 10% needs be re-implemented to port the application to Laravel or Symfony or whichever other.

Being guided by these 2 items, I feel I'm a much better developer, even while I'm still coding for WordPress: through Composer my project codebase is always coherent and manageable, and coding against interfaces makes me think what my application needs in an abstract way, without being limited by the CMS's own opinionatedness (or however you say this).

Btw, to implement routing in WordPress as done by Laravel or Symfony, you can also use Cortex, I'm using this library and it works great