Making landscapes in blender is fairly straightforward if you know what you're doing. One of the new techniques I tried this time was baking detail from WorldMachine as a normal map. This isn't something you can do with the built in landscape tool in blender, and one of the many reasons I'd recommend WorldMachine or L3DT if you're planning on doing this.
Below you can see how the normal maps add an immense amount of detail to the terrain. Much more than would be possible with displacement or real geometry.
The rocks and foliage were added using the Quixel bridge plugin for blender. It allows me to quickly select assets in Bridge and import them with one click. This was a very memory intensive project, all of the rocks are true high poly meshes from Quixel. They each used about a gig of ram (if not more) every time I added one to the scene. When I was done, I had maxed out the memory usage on my PC.
One of the issues with this approach, although it does end up having a crazy amount of detail, is that I wasn't able to render this scene on my GPU. It only has 8gb of VRAM and loading all of this would not have worked out well. I wish Cycles had a feature like Octane out of core, which allows you to use your system memory as VRAM.
To place the grass on the terrain, I added a hair particle system and set the object to be a grass mesh from Quixel. Trees were done in the same way. However, in the case of grass, and especially trees I didn't want them to spawn everywhere. There are better ways of doing this, but I opted for a simple approach. I went into edit mode with the terrain and selected and duplicated parts of the mesh where I wanted grass to spawn, I then separated these sections into their own meshes with their own particle systems.