The underlying operating system will ensure that you do not write outside of the memory allocated to your application (which it can do easily, due to Virtual Memory). If you do, you will get a segmentation fault or similar error In addition to that, the JVM might do its own bound checking. You'll definitely not be allowed to write in any sensible (i.e. other applications) memory, and I doubt the JVM will allow you to overwrite internal structures, but I might be wrong there. So to summarize the answer to your question: The possible damage to overwriting where you shouldn't is in the best case your application malfunctioning and in the worst case the JVM crashing.
In regards to safeguards, not using Unsafe would be a pretty good one... Other than that, you can of course write your own memory allocator inside the memory allocated by Unsafe and flag some areas so your application code does not write into areas it shouldn't.
So the answer to your last question would be that if the JVM allows you to access memory outside of the allocated unsafe regions, then the information and type of memory you can access is any of your objects as well as any internal JVM structure. Obviously changing those would wreak havoc, so it's likely that attempting to do so would result in a crash.