How do I let contributors edit their posts after being approved once?

There is a capability in WordPress called “edit_published_posts”. Contributors do not have this capability by default (refer to the Roles and Capabilities Codex page to see the out-of-box role configurations).

You can add this capability to the contributor role with code like this:

// get the "contributor" role object
$obj_existing_role = get_role( 'contributor' );

// add the "organize_gallery" capability
$obj_existing_role->add_cap( 'edit_published_posts' );

This code should only need to be run once–perhaps on activation of a plugin.

If you’re not comfortable with code, you can use the Role Scoper plugin (or something like it) to add this capability to the contributor role.