If you have an instance of Object1, it will have an Object2Link property, which is a list of link objects. So you can use that list to get at its Object2’s.
Or you can fetch just the link objects, with a predicate for Object1. You can then use each link object to get the properties of Object1, Object2, and the extraProp of the link.
Yes, create a new link, set the Object1, Object2, and extraProp properties, and save it.
To remove, find the link that matches what you want to remove, and delete the link.