Yes, you are right that using the Opportunities relationship on Contact you will only get the opportunity which has this contact as primary contact. This is enabled via ContactId field on the opportunity.
You will need to query on OpportunityContactRole using to get all opportunities.
Select OpportunityId, Opportunity.Name, ContactId from ...
First, asynchronous code will not start until the transaction that requested it ends; waiting a few seconds would not allow an asynchronous process to start (with the single exception of Platform Events, which could be possible, but unlikely).
Second, Salesforce doesn't have any default behavior that creates a contact when an account is created, so it is ...
opportunity is not shown in the contact detail page and when I create opp from contact detail page then the value of custom lookup (parent contact) will not populated automatically.
This doesn't appear to me to be a code-related problem. Rather, you have the wrong Related List on your Contact Page Layout. Presumably, you have the Opportunity Related List on ...
You can remove this with below steps-
Go to the object on which you are seeing this button
Find the Search Layout for Salesforce classic menu
Once you click that menu, Find List View menu.
You can see all button present there just uncheck particular checkbox and save it.