Sounds like you are doing the right things as parents. Every child has some early and some late developmental areas, and if he's understanding you well, I wouldn't be too concerned yet. Our neighbors intentionally raised their son to be German/English bilingual, and he understood everything, but didn't try to speak until he was around three. Then he started out fluently in both languages, speaking in full, comprehensible paragraphs.
You might be able to encourage some words by playing some of his games with him, and providing words or phrases that some of his "characters" are speaking. He may incorporate some repeated phrases into future play. My grandboy 4.5 adores my contributing to his games and vocabulary in this way. For example, we have little planes we fly around. Before takoff, we run through a "Pre-flight checklist: fuel, check; wings, check; rudder, check; landing gear, check; power, check…. Blue Ace, you are now cleared for takeoff on Runway Two. Beware of turbulence at 2000 feet…." "Turblience" is now one of his favorite pretend words, and it's so cute I don't correct him.
Of course, I started with much simpler words, and built up to this level. My youngest sister, my daughter, and my grandson all started with the word "hot," which is easy, and fun, to say, and easy to comprehend.
You could start with very simple words and phrases that would be relatively easy for your son to shape with his mouth.