@SirRufo mentioned the solution in the comments but didn't post it as a soltion, so I'll explain it here.
The http POST method actually has no concept of arrays.
Instead having square brackets in the field names is just a convention.
This example code works:
var restClient = new RestSharp.RestClient("https://api.crowdin.com");
var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST);
request.AlwaysMultipartFormData = true;
request.AddHeader("Content-Type", "multipart/form-data");
request.AddQueryParameter("key", projectKey);
request.AddQueryParameter("json", "");
request.AddFile("files[testfile1.pot]", fileName);
request.AddFile("files[testfile2.pot]", fileName);
// Just Execute(...) is missing ...
No need to nest custom parameters or anything complicated like that.
Adding the files with this "special" name format is all it takes.
My mistake was thinking that the files[filenamehere.txt]
part implied a more complex POST body than it really needed.