Assuming that the junction between Contact and Opportunity is via the OpportunityContactRole object, then the answer is yes, with caveats. You would need to run a query on the OCR object to return all related fields on Opportunity and Contact, so your REST call would look something like this:
Now the caveats... this isn't quite what you asked for in #1 & 2 but it's close. This query returns a list of contacts that have opportunities (inner join), in which that contact is the primary opportunity contact role and matches that email address. The list returned may represent many different contacts and many different opportunities, which you'd then have to parse in your app.
Another great alternative is an Apex REST Service, which will return whatever you want. This allows you to develop your API and maintain your logic in Salesforce instead of your external app. Take a look at Apex REST Services Overview for more information.