With your code, you will only retrieve all features with scope "Web". There is actually a difference between features scoped to a site ("Web" class) or to a site collection ("Site" class).
The following adjusted code retrieves all active features for the site collection and the site:
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Site siteCollection = clientContext.Site;
Web site = clientContext.Web;
FeatureCollection siteCollectionFeatures = siteCollection.Features;
FeatureCollection siteFeatures = site.Features;
I'm certain that you won't be able to access WebApplication and Farm features with CSOM (SharePoint client-side object model). As you want to support SharePoint Online, that's your barrier.
If you only want to go for SharePoint OnPremise (SharePoint Foundation or Server), you could go for SSOM (SharePoint server-side object model), which Jerry_MSFT described above. WebApplication features could then be accessed using
web.Site.WebApplication.Features (web is your SPWeb class). But you don't have that possibility in CSOM.