Although SHA-384 can be used with DSA, there is no standard OID for such a combination, so OpenSSL won't be able to encode the "signature algorithm" part of your self-signed certificate. Standard OID have been defined for DSA with SHA-1, SHA-224 and SHA-256 only. For your self-signature, you will have to relax your "SHA-384 only" requirement. Since the self-signature has exactly zero cryptographic value anyway (it is there only because a certificate has a non-optional field for the "signature") and could be replaced with some random bytes of approximately the right size, this should be no hardship.
Similarly, DSA had first been defined to use a modulus in the 512 to 1024 bits range, then a modulus of exactly 1024 bits, no less and no more. Recent versions of the standard (FIPS 186-4) allow for a longer modulus, with restrictive choices: 1024, 2048 and 3072 bits only, with a subgroup size of 160, 224 or 256 bits (see page 15 for allowed combinations). Basically, using a modulus of size other than 1024 bits will imply interoperability issues (already using DSA will imply interoperability issues, because nobody does that in practice, so this support is, at best, poorly tested in deployed implementations).
(Incidentally, this means that using with DSA a hash function with an output larger than 256 bits is totally useless, since security will be limited to that of a 256-bit group, i.e. the extremely reasonable "128 bits" security level.)
Generation of the random k value for each signature is automatically done by OpenSSL so you do not have to worry about it (it is already hard to do correctly; if library users had to do it themselves, it would simply never be done correctly).
OpenSSL allows for the configuration of many cipher suites; see the documentation. In SSL, traditionally, the server follows the client preferences for cipher suite selection, but OpenSSL (the library) to enforce the server preferences (i.e. to force the cipher suite to be a specific one, as long as the client supports it, even if it did not appear first in the list sent by the client). Note that OpenSSL is a library: you use it only through some application code which uses OpenSSL, and you can configure OpenSSL's behaviour only through the configuration options of that application code, which may or may not give you leverage to apply arbitrary SSL-level options.