I'm facing the very same challenge - and options suggested by SF was to use their archival service (or do a BCC on send). 

One possible solution I've found - 

1) Create a Data Extension, with an unlimited text Field. 
2) Add Ampscript in your Template/Email to Log the HTML into the Data Extension
3) Retrieve the HTML from the data extension using API (or flat file extract if needed) 

    %%[ 
    IF _messagecontext == "SEND" AND jobid > 0 THEN
    set @HTML = HTTPGet(view_email_url)
    InsertDE("EmailHistory",
    "JobID",jobid,
    "SubscriberKey",_subscriberkey,
    "EventDate",NOW(),
    "HTML",@HTML
    )
    ENDIF
    ]%%

In addition, using SQL & Automation you can combine the result from the data extension with the results of the _Sent and _JobID tables if desired.