Options, tables, scheduled events, user meta and post meta all survive deactivation and deletion unless the plugin explicitly removes them, and most do not.
// uninstall.php — runs on delete, not on deactivate
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
delete_option( 'turkerdev_settings' );
wp_clear_scheduled_hook( 'turkerdev_daily_sync' );
$wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE 'turkerdev_%'" );
The constant check is required — without it the file can be requested directly. Scheduled events are the ones that cause visible trouble: a cron hook whose callback no longer exists fires on every page load, fails silently and is never removed. A site that has had thirty plugins over ten years has a wp_options table full of settings for software that is long gone, and clearing it is archaeology.