First let's translate some of the terms that I'm going to use, because there's many different variants:
- Consequent: also called the apodosis or result clause
- Antecedent: also called the protasis or if-clause
- Hypothetical: also termed remote or subjunctive or imaginary
- Non-hypothetical: also termed open or indicative or real
The Original Poster's Question
It is perfectly possible to have a past tense non-hypothetical antecedent with a hypothetical consequent, in just the same way that we can have a present tense non-hypothetical antecedent with a hypothetical consequent. Consider the following:
- If he's Bob, you would be Mike.
- If she left at four, she would have arrived by now.
The first has a non-hypothetical present tense antecedent and a hypothetical consequent. The second has a past simple non-hypothetical antecedent and a hypothetical consequent.
The Original Poster's example is therefore perfectly readable as a conditional with a non-hypothetical antecedent. The antecedent John was there uses tense in the normal way and therefore indicates a proposition entertained as a fact. The consequent uses a past perfect construction to indicate a situation where we would otherwise expect the past simple. This backshifting of tense indicates a hypothetical consequent. It represents a logical deduction on the part of the speaker:
- If John was there, he would have seen the accident.