If you are using a Visualforce page, you can using locking statements on click of submit button on your page which will not allow anyone else of update those particular records which you want to lock.
Please read this link to know about locking statements.
Locking statement is good for one time transaction but if you want to keep a record locked after certain stage then as @Richard Durrant said Approval Process is one option.
Like on click of "Submit" button on your page, update some field that can hold the submitted stage of that record. Create Approval process with entry criteria of submitted record and don't unlock record even after approval.
Another option is to override the standard Edit button with custom VF page. If a particular record status is submitted (which you should keep in certain field once a record is submitted, best to use some checkbox), VF page will show an error that "you can't further update this record". If record is not submitted, show the fields in edited form.
I will not suggest using recordtype and pagelayout, because one can easily update a record by playing with url.