Question: I have a 3D application in which I render terrain as a heightmap. The further away the terrain is from the camera the lower the resolution it will be at. Is there any option other than creating a vertex buffer object / display list for every resolution or would there be a way to have one, at the highest resolution, and somehow tell the GPU to only use some of the data?

Answer: 
You need to implement a *Level of Detail* (LOD) algorithm. A comprehensive list of algorithms with colorful pictures can be found [here](http://vterrain.org/LOD/Papers/). I would suggest [geomipmapping](http://www.flipcode.com/archives/article_geomipmaps.pdf) as an easy starting point. There are also some interesting [implementations](http://vterrain.org/LOD/Implementations/) which you may be able to reuse or learn from.

In most of the simple implementations, there are typically several index buffers for different levels of detail and one or more vertex buffers for different parts of the terrain. The GPU cannot reduce the level of detail of geometry by itself, except for tesselation shaders, which have been also used for terrain rendering using vertex texturing (the terrain data is then in a texture instead of in a VBO and the roughness is controlled by different tesselation level).
You have to create your VBO with local position coordinates. Send this coordinates to your shader and apply the transformation to world coordinates on the shader, with special view to the resolution, which you can bind as an uniform to the shader.

And one last thing: **"Never touch an existing VBO!"** ;-)