In short: Drupal should ship with form-indipendent CRUD Controllers for all entities it has. It should be easy to reuse code from the core to programmaticly create and update fields or whole entities without manually taking care of language and field settings. form-indipendent validation should take care of this as well.
I'm using Drupal in a lot of cases along with manual imports, exports and generell creating, updating entities / nodes programaticly. Since Drupal 5 this is pain.
Creating and updating in Drupal seems to be mostly Form based. Magic happens often in hook_form_submit and cannot be reused elsewhere in the code. You have to either create fake $form_state, $form and what else arrays to reuse the hook_form_submit or copy and paste code into your module. Reusing the form_submit is btw. also not save, because you'll never know what action - you don't want - are also in the form_submit like, for example, a redirect.