You have to make the decision somewhere in your code, unless you're willing to lean on a heuristic; all of the examples in R and Lil make assumptions about the names of columns in the file on-disk just as they make assumptions about the delimiter and the presence of headers.
If I knew the CSV file didn't have built-in headers, I'd write the Lil script like this:
purchases:readcsv["country,amount,discount\n",read["headerless.csv"] "sii"]