This, from a Metalink forum post, explains why the error goes away:
"Could you catch ORA-4068 error and repeat the code? I mean it is like this ... you execute a procedure, if it is invalid, oracle will throw 4068. You check the error, if it matches 4068, re-execute the procedure, this will force a automatic recompilation and the execution will resume. "
But it does not explain why the package keeps on going invalid when no-one is changing anything...