How to save widget settings on field value change?

You’re going to want to use AJAX for this. WordPress provides resources for connecting JS to PHP callbacks which is outlined in detail in the Codex. Basically, you’ll want to take the following steps:

  1. Attach a handler to the first category select box using the .change() jQuery method.
  2. Use an AJAX function to post that data to the ajax url to call your PHP callback function.
  3. Create a PHP callback function that will take the category name from the select box and use WP_Query to retrieve a list of posts, which the function will then return to the AJAX function.
  4. Take the server response back in the JS ajax function and use it to set the select values of the second select box in the widget using jQuery.

It sounds like you’ve already figured out the complexity of the Widgets API so this should be a walk in the park for you.