Whats the best way to customize default doctypes of ERPNext keeping it compatible with future updates. If I use customize form instead of edit Doctype, will my changes be saved when I setup a new copy of instance?
you need to have a custom app, do your customization there and push it to repo. See fixtures https://frappe.github.io/frappe/user/en/guides/app-development/how-to-create-custom-fields-during-app-installation.html
Are you wanting complete custom functionality or do you just need some extra fields? If it is the former then a custom app is in order I believe. If it is the later, then you can just use customize form in setup to add the fields.