Currently, dates for approval submission, approval and publish are only visible in the individual process change logs. It would be beneficial to have a report on Process submission, approval and publish dates (better if included in API). This would enable us to report on service level agreements (Approval timeframes, publish timeframes) we have in place for our business process management program.
There is also currently no easy way to report if an approval was withdrawn by a member of the approver flow.
The historical view of process state is already included in the reporting API, in the ProcessesHistorical table. My organisation currently uses the data in this table to extract similar metrics to what you are mentioning.
For example, we have a report that shows all processes for a business area, with a metric of the number of days that process has been in progress for those processes that aren't in a published state. To get this metric we use the ProcessesHistorical table to look up the first minor version (x.1) of the current major version that process is at, and compare its 'StatusChangeDate' field to today's date.
For approval/publish timeframes you would be able to do similar - look up the first minor version that a process is in 'awaiting approval' or 'awaiting publish' status for that major version. You then compare these dates to each other or the next publish date to get your timeframes.