It looks like there are some issues with the FinancialDerivative function. As you point out, absent a dividend the price of American and European call options should be identical (not true for put options, of course, due to the time value of the cash value of the stock sold via the put).
One way to get the same result is to use the binomial method option:
FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 100.00, "Expiration" -> 1}, {"InterestRate" -> 0.03, "Volatility" -> 0.2,
"CurrentPrice" -> 100, "Dividend" -> 0.0}, Method -> "Binomial"]
which gives 9.4134, the same price as for a European option.
As you point out, changing the number of steps used in the Binomial method has no effect (as it should).
As regards the Method option, the documentation says:
By default, FinancialDerivative prices American vanilla options by numerically solving the BlackĀScholes partial differential equation. A binomial tree solution method can be specified by setting the Method option to "Binomial".
So the difference in prices appears to be the result of using the Black-Scholes vs. Binomial pricing model.
Using Black Scholes I get a value of 9.4134, which agrees with the Binomial method price. So the issue appears to be with the default method.