Yes, this is possible and happens automatically. Numerical arrays are by default transferred as matrices. Non-homogeneous arrays or arrays with non-numeric types are transferred as cells.
This transfers as a matrix:
In[12]:= MSet["a", {1, 2, 3}]
In[13]:= MEvaluate["a"]
Out[13]= ">>
a =
1 2 3
"
This transfers as a cell:
In[14]:= MSet["a", {1, 2, "asd"}]
In[15]:= MEvaluate["a"]
Out[15]= ">>
a =
[1] [2] 'asd'
"
Force a numerical array to transfer as a cell:
In[16]:= MSet["a", MCell[{1, 2, 3}]]
In[17]:= MEvaluate["a"]
Out[17]= ">>
a =
[1] [2] [3]
"
(This is usually useful when we want to have a cell, each element of which is a matrix.)
Your array:
In[18]:= lis = {{1, "abcd"}, {2, "ef"}, {3, "xyzwabc"}}
Out[18]= {{1, "abcd"}, {2, "ef"}, {3, "xyzwabc"}}
In[19]:= MSet["lis", lis]
In[20]:= MEvaluate["lis"]
Out[20]= ">>
lis =
{1x2 cell} {1x2 cell} {1x2 cell}
"
MATLink is geared towards one-dimensional cells, so this transfers as a cell of cells, not as a 2D cell. If you need a 2D cell, you'd need to change the data structure on the MATLAB side.
My internet connection is very limited at the moment, so I might not be able to respond to further questions right away (but I'll surely get to them in a couple of days).