Here are some cases where I've used it.
1) Java wants to call scripting language, example 1. I have a Java app that accepts user comments via the WMD JavaScript widget. (Same widget that StackOverflow uses, actually.) User enters comments in the Markdown format and a JavaScript library called Showdown converts it to HTML in two places: (1) on the client, to support real-time previews; and (2) on the server, since I want the client to send pure Markdown to the server and store that there so the user can edit the Markdown later (instead of having to somehow reverse the HTML into Markdown). When storing the comment on the server, I do run the conversion there as well, and I store the HTML alongside the Markdown so I don't have to dynamically convert the Markdown when displaying comment lists. To ensure that the HTML on the server matches the HTML on the client, I want to use the exact same Showdown library. So I run Showdown server-side inside the Rhino JavaScript engine.
2) Java wants to call scripting language, example 2. I'm working on a deployment automation application that involves stakeholders across different roles, such as developers, sysadmins and release engineers. The overall app (workflow and UI) is a Java app, but at various locations it calls various scripts (e.g. Ruby, bash), such as for pushing packages, verifying configuration, installing packages, smoke testing, etc. This is partly because script is better/more economical for expressing directory creation, copying, moving, wgetting, etc., and partly because the people who own that particular piece of the pie know how to work with scripting languages but not Java. So we invoke scripts here using Java's Scripting API. Admittedly in this case we could just execute the scripts outside of Java but see #3 below.
3) Scripting language wants to call Java. In the aforementioned deployment application, we have web-based deployment logs, and we put a lot of effort into making the deployment logs as easy to read and understand as possible, because a large developer/SQA/release engineer population consumes the logs, and not everybody understands all the details of what exactly goes on with a deployment. Pretty-printing and color-coding are part of the approach. We implemented a pretty-printing deployment log API in Java but we want to be able to have the scripts call that. So for example when the Ruby push script runs, we want it to log its progress to the pretty-printer. Running Ruby inside JRuby allows the Ruby script to see the Java pretty-printer API.