I took a look at creating a megafunction a while back and decided to go with the hardware .tcl (SOPC Builder/Qsys) infrastructure instead for these reasons:
1) I prefer microcore based design which you can only do in SOPCB/Qsys
2) It was much easier to write the .tcl code than it would be to write the java code needed for megafunctions (coming from someone who hates .tcl that says a lot)
3) I'm a strong believer in standard interfaces (Avalon) for IP reuse and making my life easier whereas with a megafunction if you are going to use standard interfaces you might as well use a system integration tool at that point (SOPCB/Qsys)
4) I hate writing testbenches, using standard interfaces I can bolt BFMs up to them and get through my verification a lot faster (or sometimes just bolt Nios II up to it and test it using C code)
There are more reasons but I think you get the picture :)