We can access completed K2 process instance information through smart objects. All the reports that you get with K2 are built using smart objects. One thing to note with the reporting data is that it is not real time.
The asynchronous nature of a workflow environment means that if you need access to state information in real-time you will need to manage that. One way to do this is to use a custom smart object. My preference is to stick with the K2 provided reporting smart objects.
Here’s a code sample for accessing the smart object data.