'ERROR: text search dictionary "unaccent" does not exist' during CREATE INDEX?
I recommend this alternative approach to get an IMMUTABLE unaccent() function:
CREATE OR REPLACE FUNCTION f_unaccent(text)
  RETURNS text AS
$func$
SELECT public.unaccent('public.unaccent', $1)  -- schema-qualify function and dictionary
$func$  LANGUAGE sql IMMUTABLE;

Use that function for the expression index and in all queries. Detailed explanation:

Does PostgreSQL support “accent insensitive” collations?

And do not alter the original function:
ALTER FUNCTION unaccent(text) IMMUTABLE;
.. which also solves any possible issues with the search_path: The fact that you had to schema-qualify public.unaccent() in your index definition suggests that you might not have public in your search_path.
Then, your index:
CREATE INDEX author_label_hun_gin_trgm ON address 
USING gin (f_unaccent(label_hun) gin_trgm_ops);

I did not include lower(). You can, but trigram indexes support case insensitive patterns out of the box:

Pattern matching with LIKE, SIMILAR TO or regular expressions in PostgreSQL

Troubleshooting
If you are running all of this in the same session with the same search_path and one call works while the next reports function ... does not exist, then something is seriously broken in your database.
First make sure you are testing with a valid search_path setting:
SHOW search_path

Details in this related answer

How to create table inside specific schema by default in Postgres?

If you diagnose breakage, switch into alarm mode and take all the necessary steps to avoid data loss (like drawing a backup before you do anything else).
A broken index for the system table pg_proc might be the cause. To reindex all system tables from the shell:
reindexdb [connection-option...] --system mydb