PowerShell & C# are two languages you can use to access the SharePoint Object Model.
Depending upon the kind of task you want to perform on SharePoint platform, you can choose any one. In general, almost every task is achievable using C# or Powershell
Using C#, If you want to activate a feature when a new site is created, below is the code you can use in WebProvisioned Event Receiver.
Guid featureGuid = new Guid(YourFeatureGUID);
if (web.Features[featureGuid] == null)
By the way, I would recommend to create the site using Publishing Site definition so that you get all publishing features activated by default.