I think you need to have some trigger to release the locks when a user leaves a page: even if you disable the navigate buttons, a user could still hit refresh or close his browser. Even then, you don't solve the problem when a user loses his internet connection.
A second solution could be the ReleaseOldLocks Java action. Perhaps you can run that more agressively, or modify it, so that a user can release his own locks?
We have a Scheduled event that executes every 5 minutes. It checks all applications locked for longer than x minutes and unlocks them. Also, we have configured the opening of the specific entity, to check whether it is the current user locking the entity, and allow them to open it again.