More generally, a block is an expression that can support multiple statements. You can use them all sorts of places, this is just a common example where blocks and non-blocks are used. Closure bodies is another.
Note that panic! is a little special because it diverges, so it has the never type ! which can coerce to any other type. But if your match arm needs to return nothing, i.e. the unit type (), then you could use a semicolon and braces to suppress other expression types. For example, { vec.pop(); } will drop the Option -- or you can literally write drop(vec.pop()).