Here's a very lightly tested attempt:
ConcatenateCsvFiles[output_String, inputs : {__String}] :=
With[
{joinedData = Import /@ inputs},
Export[output, Prepend[Flatten[joinedData[[All, 2 ;;]], 1], joinedData[[1, 1]]]]]
But I should make some comments. First, I probably wouldn't actually do all three steps in one big function like this. I would probably do the Import and Export separately from the catenation of the list data. It would be easier to test and parts could be re-used independently. It also reduces the risk of overwriting good data with bad.
Second, this doesn't match what you asked for:
contatenate[singleFilename,#]& /@ {f1.csv,f2.csv,....fn.csv}
But what you asked for would probably need to rely on updating some temporary state, and it would just become awkward. The semantics of the problem (as I understand it) isn't about applying the same function to a list of data, but about restructuring a list of (lists of) data.
Third, if you're never going to process the data itself--i.e. this is strictly a file-to-file convenience tool, then there might be a neater approach that doesn't bother with importing structured data but just processes the files' contents as just lines.