Query:
select b.name, a.last_execution_time
from sys.dm_exec_procedure_stats a
inner join sys.objects b on a.object_id = b.object_id
where DB_NAME(a.database_ID) = 'databsename'
Limitation:
Querying the dynamic management view sys.dm_exec_query_stats will absolutely get you want you need. However it is dependent on the cache not having flushed the query . If the cache has flushed the query your options are limited to what you have in place in terms of monitoring. If you set up a lightweight server side trace that only captures a few events and columns, you can have that running 24/7 and be able to see whether or not a procedure has been run for a lot longer than the life of the cache.