I'm having the same issue. Site is http://www.arresteddevops.com. All of the stuff coming from the CDN (CloudFront with S3 orgin, set up in W3TC) has no expiration set for the client, even though it is set within the plugin.
For example, here are the headers coming from origin:
* Connection = keep-alive
* Vary = User-Agent
* Pragma = public
* CF-Cache-Status = HIT
* CF-RAY = 10f7a9b832930755-AMS
* Accept-Ranges = bytes
* Content-Length = 43924
* Cache-Control = public, max-age=31536000
* Content-Type = image/jpeg
* Date = Sun, 23 Mar 2014 03:50:07 GMT
* Expires = Mon, 23 Mar 2015 03:50:07 GMT
* ETag = "ab94-4f5241b06d1bc"
* Last-Modified = Fri, 21 Mar 2014 20:55:27 GMT
* Set-Cookie = __cfduid=d8b6a37ac1e911d72154b389cfc5582471395546607392; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.arresteddevops.com; HttpOnly
* Server = cloudflare-nginx
* X-Powered-By = W3 Total Cache/0.9.3
and here are the headers coming from the same image in cloudfront
* Connection = keep-alive
* Age = 34
* X-Cache = Hit from cloudfront
* X-Amz-Cf-Id = rjDTYHTSfWYJaEHnFU_MKb-n3KiOkbb2iIut7s8CjMnAhbh2URA8tg==
* Accept-Ranges = bytes
* Content-Length = 43924
* Cache-Control = public
* Content-Type = image/jpeg
* Date = Sun, 23 Mar 2014 03:48:32 GMT
* Expires = Mon, 23 Mar 2015 03:42:07 GMT
* ETag = "d14f107a21808776af7eecb757463c9a"
* Last-Modified = Sun, 23 Mar 2014 03:42:07 GMT
* Server = AmazonS3
* Via = 1.1 2feaae5abe3e9545d63b67a1381aec70.cloudfront.net (CloudFront)