I played around with the code and I finally found a way to do what I wanted. In the meanwhile, I think I've also better understood the behaviour of `Manipulate`.

This is my solution; it deals with the second MWE I posted:

    Manipulate[
     (* === Calculations that are triggered each time there is a change 
    in tracked symbols ('parameters', in this case): === *)
     message = "Updating..."; result = "";
     Pause[2];
     result = parameters[[1]] + parameters[[2]];
     message = "Ready";
     (* === Results to be shown: === *)
     Column[{Dynamic[message], Dynamic[result]}],
     (* === Controls: === *)
     {{a, 5}, 0, 10, 1, Appearance -> {"Labeled"}, 
      AppearanceElements -> None}, {{b, 5}, 0, 10, 1, 
      Appearance -> {"Labeled"}, AppearanceElements -> None}, 
     Button["Calculate", parameters = {a, b}],
     (* === Other settings: === *)
     TrackedSymbols :> {parameters},
     Initialization -> (
       Clear[a, b, parameters, message, result];
       parameters = {5, 5}; result = 10; message = "Ready"
       )]

This is the result:

![enter image description here][1]


  [1]: https://i.sstatic.net/Y2ELV.gif