Access with getFieldPath() should work for you, I'm surprised you're saying it doesn't compile?
The problems occur when the fieldset contains items from referenced records (dots in fieldPath). You need to use something similar to Using sObject.get() to fetch a field value from a related parent object
sObject acc = [SELECT Owner.Manager.Profile.Name
FROM Account WHERE Owner.Manager.Profile.Name != null LIMIT 1];
String path = 'Owner.Manager.Profile.Name';
// refactor this bit into helper function
List<String> tempPath = path.split('\\.');
Sobject temp = acc;
if(tempPath.size() > 1){
for(Integer i = 0; i < tempPath.size() - 1; ++i){
String currentLevel = tempPath[i];
System.debug(currentLevel);
temp = temp.getSobject(currentLevel);
}
}
String last = tempPath[tempPath.size()-1];
System.debug(last + ': ' + temp.get(last));
You'll still have to add null checks ;) Or at least some try-catch.