It can be done - but requires a fair amount of custom code.
Assuming you're using google analytics, you can report back whatever you want using events:
https://developers.google.com/analytics/devguides/collection/analyticsjs/events or https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide
Link 1 is the newer 'Universal Analytics' (mid 2014 released)
Link 2 is for the classic version of google analytics
For tracking time on the page, in custom code you would set a variable like:
var startTime = Date.now(); and then later
var timeOnSite = (Date.now() - startTime) / 1000; which will give you the number of a seconds between when the user loaded the page and whenever
timeOnSite was calculated.
if you're not concerned with the time and just want to know if the user has spent > 20 seconds on the page, you also could use the
setTimeout function and then fire an event to google analytics with the same method as above once it triggers.
/** fire google analytics event here **/
}, 20000); // This function will be called after 20 seconds (20000 milliseconds) have passed
With single page sites, bounce rates are artificially high - google touches on that and suggests using events to get more accurate data in this post: https://support.google.com/analytics/answer/1009409?hl=en