How to change data type from varchar to text?
You are missing recreating the index.
Also you can use your schema changes:

$schema = drupal_get_schema_unprocessed('my_module', 'simplenews_subscriber');
db_change_field('simplenews_subscriber', 'mail', 'mail', $schema['simplenews_subscriber']['fields']['mail']);


Another thing you can do is test out altering the table manually just so you can see what errors are popping up.