There is no standard method for this so it will depend on what code the software developer writes. For instance that code could just store a starting date based on your clock, or if more sophisticated it could actually get the official date from the internet. As to where it stores this, the registry is just one of the options available to programmers, it could also store it in the hidden application data folder, or something called isolated storage in .net, or on any other folder on your system. It could also send a unique ID and start date to their server and periodically check against that. The storage can be encrypted or unencrypted. People who crack programs reverse engineer the specific method that was used, but it would require in depth knowledge, unless it's a very unsophisticated method, like storing it in human readable form in registry.
Most programmers who really want to protect their software would certainly not choose this method.