One option to support object and array extension might be to adopt CDDL's Unwrapping mechanism (https://tools.ietf.org/html/draft-ietf-cbor-cddl-03#section-3.7).
Syntax can be decided on, but we could say that objects or arrays referred to with a rule name preceded by two dollar signs ($$) turns the object or array into a group (unwrapping it).
So:
$myseq = { "a" : integer, "b" : boolean }
$myextendedseq = { $$myseq, "c" : string }
Resulting in $myextendedseq being treated as:
{ ( "a" : integer, "b" : boolean ), "b" : string }
For objects, we could support auto-unwrapping (because it's not ambiguous). e.g.: just require (single $ char):
$myextendedseq = { $myseq, "c" : string }
The same can't be done for arrays.