In 2.10 it's 6.8M. If it's a problem you might consider using ProGuard to make it smaller (potentially far smaller if you're not using much of it).
Restrictions, side effects: no. It's just a jar. (At least unless there's something really unusual about your environment, like you're trying to run on Android or some non-standard JVM, or maybe, I don't know, you're doing heavy bytecode manipulation or something.)
Any practical advice?
What Roland said. But, a few additions:
It isn't strictly necessary, but if you really want to be conservative and safe, consider writing interfaces in Java and then implementing them in Scala, hiding the implementation classes and exposing only the interfaces. Writing the interface in Java means you can't accidentally do something Java can't grok.
Remember that from Java, type parameters must always refer to reference types, never to primitive types. So if you have a Iterator[Int] on the Scala side, it will appear as an Iterator<Object> on the Java side, where at runtime the Objects will be boxed Integers. (You might have hoped for the type visible from Java to be Iterator<Integer>, but was this was impossible to arrange while still maintaining full interoperability; see e.g. SI-4214.)
Consider using GenJavaDoc to provide your API's users with JavaDoc instead of ScalaDoc. (It's new; I haven't tried it.)
Read "Integrating Scala with Java", which is Chapter 10 of Josh Suereth's book Scala in Depth.
I call my Scala code from my legacy Java code all the time and have experienced only minor, easily worked around annoyances, like funny names (MODULE$, _$eq) and additional typecasts. I haven't personally attempted the more ambitious goal of providing an API that isn't merely *possible* to call from Java, but it is really slick and convenient and won't alienate Java people who know no Scala. Akka and Play seem to have succeeded at that, though.