No, you can't pass types either to or from a function. And to cut short the next question, yes we've been asking, and yes it will probably come sometime
For your second question, it's simply a matter of compiler complexity. DBPro uses a system to provide variable length arrays that doesn't fit into the type scheme very well - the compiler would need to do a more complex 'deep' copy to copy them - although this must already happen in some form with strings.
You could simulate arrays with a pointer to memory you allocate yourself, but that gives you the problem of remembering to allocate the memory, copy the memory when copying types, deallocate the memory when you're done, and accessing that memory safely when reading/writing the value.
Best to do something like this:
type MyType
x as integer
y as integer
endtype
type MyTypeExtra
blah as integer
endtype
dim Stuff(10) as MyType
dim ExtraStuff(10,10) as MyTypeExtra
You still have to remember to do the copying, but you don't have to remember to allocate/deallocate and read/write access is safe and easy.