I've worked on what I think could be called a "distributed monolith" and its not bad, services and clients can share interfaces, common build and deployment infrastructure for everything etc.. You still get the benefit of being able to scale out, separate failures and deploy components easily, w/ the benefits of standardizing around one language.
We do the same. A monolith gets copied to all stations which then run different parts of it. That way they all have the same infrastructure code available.
How do you deal with services that use different versions? Tight coupling means that to make changes to Service A you have to wait for Service B to make the changes...which can be a loooonnngg time if the team looking after Service B is different from your own.