I found an excellent article on the use of value types to help reduce the complexity of reference types. In the process, it does an excellent job at explaining the differences between the two in a more meaningful way than many other articles I have found.
You can read about it here.
To better understand the internals (in a very general way) of what goes on behind these types, take a look at this article explaining what happens under the hood in .net. This also gives an insight into the performance implications.