I've deleted my previous suggestion about using keepConditions as it didn't work in your use case (I tested) but it got me thinking and I've come up with this:
$('#example tfoot th').each(function(k, v){
    var title = $(this).text();
    $(this).html('<input type="text" data-position="'+k+'" placeholder="Search ' + title + '" />');
});    
var example = $("#example").DataTable();
example.columns().every(function(){
    var that = this;
    $('input', this.footer()).on('keyup change', function(){
        var hash = [];
        $('#example tfoot th').each(function(k, v){
            if(~~$(v).find("input").val().length){
                hash.push($(v).find("input").data("position") + "=" + encodeURIComponent($(v).find("input").val()));
            }
        });
        window.location.hash = hash.join("&");
        if(that.search() !== this.value){
            that.search(this.value).draw();
        }
    });
});
if(window.location.hash) {
    var hash = window.location.hash.substring(1).split("&");
    $.each(hash, function(k, v){
        $("#example tfoot th input:eq("+v.split("=")[0]+")").val(decodeURIComponent(v.split("=")[1])).trigger("change");
    });
}
Basically each time a search term is entered we iterate over all the inputs and update the url hash with the results, then we make sure we listen to see if there is a hash and do the reverse. This is a working example.
Hope that helps.