The dx format isn't understood by the mdapi, and non-scratch orgs do not support the dx format because they're missing key data tables under the hood. The net result is that conversion to and from dx format will be necessary until Next Generation Packaging reaches parity with Classic Packaging.
In the future, your code repository will be broken up in to packages that can be independently installed and upgraded. This will ultimately minimize deployment times and allow Salesforce to automatically "diff" upgrades for you in the same manner that happens today with managed packages, but without the namespaces.
Next Generation Packaging will even be intelligent enough to allow you to automatically delete classes, components, pages, and so on that are no longer needed, will validate that your code base is in a consistent state (because packages must be able to validate on their own or as a dependency), and are said to be supported even within managed packages, which will make migrating code and features into and out of managed packages a much simpler experience.
In other words, it's something that we have to do today in order to migrate towards a better experience, but this will likely not be needed in the coming releases as we're given newer and even better tools to deploy code and configuration from any particular organization to any other organization.
The source tracking feature for developer and developer pro sandboxes is GA from the winter 21 release.
You will need to first enable this in DevHub and then refresh the sandbox from PROD to get this activated.
Best Answer
No, You can't delete in production using sfdx force:source:delete.
As per doc, it Deletes source files from your project and from a non-source-tracked org, such as a sandbox.
To delete from production, use destructiveChanges.xml. Follow these articles:-
The package.xml file is a project manifest that lists all the components to retrieve or deploy. Although you can use package.xml to add components, it’s not sufficient to delete them. To delete files, create a delete manifest that’s called destructiveChanges.xml. The format of the delete manifest is the same as package.xml, except that wildcards aren’t supported.