eCart can do these three, yes, but they will depend on how you configure the cart and database.
Limited Count Coupon Discount: ?
ie Discount first ten users with coupon
Personal Coupon Discount: ?
One shot Personal Coupon Discount: ?
ie Don't allow use of coupon more than once
Discount based on external variable?
ie Number of previous purchases
-Limited Count Coupon Discount:
you will need to add a column to your orders table to record the discount used, and update the store order summary behavior to store the PromoCode session variable in that column of the orders table.
you then need to create a recordset to count the number of times the promo code has already been used, something along the lines of:
SELECT COUNT(PromoCode) as couponCount FROM orders WHERE PromoCode = $_POST['txtpromocode']
store the couponCount value in a session, and use that in the triggers for the discount.
-Personal Coupon Discount:
for this one, you will need to force login and registration for checkout. see the "Applying Register/Login to your checkout" tutorial on the eCart support page:
In the orders table, you will need to store the coupon code and the users ID. similar to the last one, create a recordset to count the number of times the user has used that promo code:
SELECT COUNT(PromoCode) as couponCount FROM orders WHERE PromoCode = $_POST['txtpromocode'] AND userID = $_SESSION['usersID']
store the couponCount in a session and use that in the coupon triggers.
-Discount based on external variable:
the discount can be based on whatever you like, it's a matter of storing the data to drive the coupon, and retrieving it with a recordset.
as long as you are comfortable working with databases and have a good understanding of storing data and retrieving it to a session, these should not be too difficult to set up.