Difference between Handler_write and Innodb_data_writes
A "write" is distinct from a "disk write".

Writes include writes to tmp tables.

This pattern avoids having to do subtracts (for Handler%, not for Innodb%):

FLUSH STATUS;
perform some query;
SHOW SESSION STATUS LIKE 'Handler%';


Innodb_% values are only GLOBAL; Handler% are SESSION, then added to the GLOBAL tallies.

Handler% is done at an engine-agnostic level; Innodb% is done in the InnoDB engine.  (This should answer you engine questions, but I have not double checked.)

Fraction of read requests that had to hit disk =
  Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests
Possibly the numerator needs to be Innodb_pages_read or Innodb_data_reads.

Sorry that I don't have answers to all your questions.