Answer 1
One possible solution would involve leveraging the OOTB Approval Workflow combined with a custom Event Handler.
The reason for this is, as far as I know it's not possible to make it so that a user can only edit certain fields as permissions cannot be assigned on the column level. However, with the Event Handler, we can catch the event as soon as the user tries
to make changes to an item and if the change is illegal, we can block it. Therefore, we can control illegal changes in this manner.
It seems as the rest of your functionality is exactly what the OOTB Approval Workflow is for except for the field changes which can be coded against by using a custom Event Handler.