1:
LOD. Lots of LOD. And a good database with all objects. You don't have a levelfile but some kind of database where you just query every object in your surroundings (give me all objects in manhattan distance x). All objects get deleted/instanced/reused as good as possible as the player moves and the terrain is also stored in some special "queryable" format.

2:
One sprite per grass "chunk" is much too less to get a good performance. You need to create merged "chunk of grass" models that contain a multitude of grass chunks, a good example would be splitting up the small.hmp from samples into 4x4 or 8x8 tiles depending on the quality you want to achieve....
Behaviour for grass can be done with a shader (wind swinging and so on)

3:
Depends on what you call "realistic". In some games the default water shader is enough, in other games you need a specialized shader for your needs.
In short: Know shaders very good and you get your realistic water...

Regards
Felix


Visit my site: www.masterq32.de