How exactly does sp_msforeachdb work behind the scenes?
First of all don't use sp_msforeachdb it has several known issues.  You are better off using Aaron Bertrand's version here and here.

However it uses a cursor, dynamic SQL and a replace.  You can actually look at the code by using sp_helptext.

EXEC sp_helptext sp_msforeachdb


If you use this code it will fix some of your issues.

EXEC SP_msforeachdb 'SELECT ''?'' AS Database
                 FROM [?].sys.objects
                 WHERE name like ''%aetna%''


The brackets will the specific problem you mentioned.  You will however run into issues if you have a database with [ or ] in it.