How to can create a user profile with approve changes by admin
A custom way can be(will need custom coding) do not expose profile fields directly to users to edit, instead each user will have a node(one to one strict mapping) node will have fields that will be mapping to user profile fields. Once a user edits a node you can set a workflow to mark it as unpublished and once admin reviews and publish fields user profile fields will be updated with node fields.

So a possible workflow can go something like


User can edit node(name it user_node) belongs to user only, you can keep user reference field on node to check the edit permissions.
When a node(user_node) is edited check the current user if user is not admin set $node->status = 0, you can use hook_node_presave() for this.
If a node(user_node) is edited by admin keep a checkbox as approve(field visible to admin only, you can use field permissions module to allow admin to see this field).If admin approves the node again in hook_node_presave() change $node->status = 1 and take the uid from the user reference field on the node, update the user profile fields with the current node field values, you can use user_save() function for this.


This is just a rough idea which require coding, I have not checked if there is a module which can set workflow for user profile if there is any it can provide you want you want out of the box.