Morfológicamente, entre "haya venido" y "hubiera venido" hay la misma diferencia que entre "haya" y "hubiera" en subjuntivo, o entre "ha" y "hubo" en indicativo, i.e., el primero es presente y el segundo es pretérito. Sin embargo, en la interpretación semántica, en los ejemplos que citas la diferencia de tiempo se traduce en una distinción "modal" entre lo posible pero no confirmado ("haya venido") y lo irreal/contrafáctico ("hubiera venido", que implica que NO lo ha hecho). De las oraciones que mencionas, "¡Ojalá [= Dios quiera que] venga!" expresa el deseo de que algo posible se cumpla en el futuro (en inglés, aproximadamente, "I wish he comes/can come"); "¡Ojalá viniera!" expresa el deseo de que en el futuro se cumpla algo que no parece probable (in English, roughly, "I wish he came/could come"). "¡Ojalá haya venido ya!" expresa el deseo de que haya ocurrido ya algo que es posible, pero que el hablante no sabe si ha ocurrido o no (roughy, "Let's hope he's already come"). Finalmente, "¡Ojalá hubiera venido ya!" expresa el deseo (vacuo, por contrafáctico) de que hubiera ocurrido ya en el pasado algo que el hablante ya sabe que no ha ocurrido (roughly, "If only he had already come! [But he has not]). En fin, esta es una descripción informal "para andar por casa", y de esos ejemplos, solamente, pero espero que te sirva para empezar a comprender el subjuntivo español.