1. Returning multiple parameters in C requires passing a structure by pointer. And yes, an array is only good when passing values of the same type.
2. AFAIK structures cannot be passed by value and must be passed by reference unless C++ has some feature for creating structures/classes on the stack. It's not recommended to stuff the stack with lots of parameter data on the Amiga since the Amiga has a fixed stack space for each program.
Arrays are stored in memory as pointers so they are always passed by pointer. (When using the word "reference" you are referring to a C++/Java term that doesn't strictly apply to C.)
3. I'm not sure why you would want to waste the stack space in doing so. Normally structures are dynamically allocated with malloc() and passed by pointer to the appropriate function.
Oh, and by the way, you can embed arrays in structures if you like.