I somehow cannot find the restriction either in the SOAP nor in the WS-BP specs...
I think you have confused things slightly. The type attribute in a message part is used with RPC/Literal bindings. From the WS-I BP:
R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the type attribute.
An RPC-style operation can have no, one or many parameters and each parameter is represented by a message part.
The following example shows how a message declaration for a GetBulkBookPrice operation may look like when using RPC/Literal binding:
With Document/Literal bindings, each part in a message corresponds to one child element of the SOAP body element. Since the WS-I BP says this about the contents of the SOAP body element:
R9981 An ENVELOPE MUST have exactly zero or one child elements of the soap:Body element.
Thus, a message that is to be used with a Document/Literal binding may only contain one single part.
Hope this clarifies things!