Salesforce allows you to do this through the Reports and Dashboards REST API
If you make an http PUT request to: BaseURL/services/data/v31.0/analytics/dashboards/DashboardID and set the session id in the request header, it will refresh the dashboard for you.
In a Visualforce page, you could add a method to your controller similar to the following:
public void refreshDashboard(){
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
req.setMethod('PUT');
req.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm() + '/services/data/v35.0/analytics/dashboards/01Z90000000A7Nx');
Http http = new Http();
HttpResponse res = http.send(req);
}