<p>Why does a user needs privileges over his own schema to create packages and triggers?</p>

I can't give you the "official" answer, but I can take a stab at the reasoning behind how it works.  On the project I work on, Oracle Developers are the ones that deploy the triggers and packages into the database schema.  But we have other teams of Java developers and testers, etc.  Once the schema are migrated into the Test and then Production environments, we don't want the testers or the end user applications to be able to arbitrarily modify the triggers and packages associated with that schema, as that could invalidate the integrity of any testing they are doing (or cause even worse issues on the production system).
So within the test/production environments, you want the testers, the Java developers, and the end-user application to be able to read and write data to the schema, but not modify the triggers and packages which encompass the baselined code.