Usually I ask questions about why something is broken in Salesforce, however, today I want to ask a different question.
We know that we can't deploy unpackaged code which introduces changes into Scheduled Jobs which are scheduled or any classes that such schedulable jobs depend upon.
This schedulable class has jobs pending or in progress
There is such settings to bypass this error by allowing deployments with Apex jobs in the Deployment Settings page in Setup.
Deployment Options
Allow deployments of components when corresponding Apex jobs are pending or in progress. Caution: Enabling this option may cause Apex jobs to fail.
Why such error doesn't happen if we package a scheduled job into a package and upgrade a package?
Package upgrade is deployment and if we introduce changes into Scheduled Jobs, which are scheduled, something can be broken.
Why then no error happens is we upgrade a package with changes into packaged schedulable jobs which are scheduled?