TLDR
There are any number of ways to accomplish what you want. The most ideal solution would be to add the id into the view, similar to how you mentioned. But - there are as many options as you can think of.
In View
The easiest (and I would argue the ideal) solution would just be to add the id in your view. You should be able to just add it like this:
echo $this->Form->input('id');
It makes it hidden automatically since it's "id" and it should populate for you as well if you're passing the data correctly to the view.
In Controller
BUT - since your question was how to do it NOT in the view, another option is to do it in the Controller. I don't know your exact project, so change it as you see fit, but before your save, you can always just append the Block's id
to the data.
$this->request->data['Block']['id'] = $YOUR_ID;
$this->Block->save($this->request->data);
In Model
This seems like a strange place, but - you if you're storing the ID in session or something, you COULD theoretically add the id here before saving as well.