1. The major functionality that you would lose if using detached objects is the change tracking of the scope/container. You will need to implement custom logic on the server to check whether the objects have been changed and if so, load the actual objects stored in the database and copy the changes to them. Having an object container on the client is not a big overhead than just having the detached objects there. You can indeed use the Evict method to control the size of the container and clean it from the unnecessary objects. Note that this method accepts an IEnumerable of persistent capable objects as well as single objects. That could speed up the cleaning.
2. I do not think you need this at all. By default OpenAccess does not set any locks to the retrieved objects. In the case of using ObjectContainers, the concurrency mechanism is triggered at the last step - when applying the changes back to an ObjectScope. There you can set the level of concurrency control to be used. And if there are any (conflicting) changes made, you will be able to handle them.
the Telerik team