Why we don't change feature's module file in code?

A good reason you don't change any features module by hand, so you don't loose your work.  Ex if you changed the file and pushed it to dev and someone else is working on this site with the UI a new featrue module will be created without your work.  A feature module not like a custom or a contrib module because if someone working on a contrib or custom module and change a file and someone has already change this file on dev and you are trying to push it, you will get a conflict with this file and you will know that.  With the feature modules if you change any file and some one is working on this feature through the UI git will let  you push your code without any conflict and you will not know that your changes are lost.  The reason behind that is any work on the feature module it does disable the feature files for the module and copy all the setting for this module in the database.
In case you are featurizing any work on your local.  Before you push you must check this feature and it's set to default not overridden.
Inc case some emergency and you changed the file by hand on your local. Before you push you must check this feature it's set to default not overridden.