Index: wp-admin/customize.php
===================================================================
--- wp-admin/customize.php	(revision 30350)
+++ wp-admin/customize.php	(working copy)
@@ -118,6 +118,7 @@
 <body class="<?php echo esc_attr( $body_class ); ?>">
 <div class="wp-full-overlay expanded">
 	<form id="customize-controls" class="wrap wp-full-overlay-sidebar">
+		<div id="screen-reader-messages" aria-live="polite" aria-relevant="all" aria-role="status" aria-atomic="true" class="screen-reader-text"></div>
 
 		<div id="customize-header-actions" class="wp-full-overlay-header">
 			<?php
Index: wp-admin/js/customize-widgets.js
===================================================================
--- wp-admin/js/customize-widgets.js	(revision 30350)
+++ wp-admin/js/customize-widgets.js	(working copy)
@@ -668,8 +668,10 @@
 
 					if ( isMoveUp ) {
 						self.moveUp();
+						$( '#screen_reader_messages' ).text( l10n.widgetMovedUp );
 					} else {
 						self.moveDown();
+						$( '#screen_reader_messages' ).text( l10n.widgetMovedDown );
 					}
 
 					$( this ).focus(); // re-focus after the container was moved
Index: wp-includes/class-wp-customize-widgets.php
===================================================================
--- wp-includes/class-wp-customize-widgets.php	(revision 30350)
+++ wp-includes/class-wp-customize-widgets.php	(working copy)
@@ -728,6 +728,8 @@
 				'removeBtnLabel'   => __( 'Remove' ),
 				'removeBtnTooltip' => __( 'Trash widget by moving it to the inactive widgets sidebar.' ),
 				'error'            => __( 'An error has occurred. Please reload the page and try again.' ),
+				'widgetMovedUp'    => __( 'Widget moved up' ),
+				'widgetMovedDown'  => __( 'Widget moved down' ),
 			),
 			'tpl' => array(
 				'widgetReorderNav' => $widget_reorder_nav_tpl,
