You only need to overload show(). The display(x) function calls writemime(io, "text/plain", x), which calls showlimited(io, x), which calls show(io, x).
The issue here is probably that there is a method ambiguity.
* Base defines show(io, x::AbstractVector) [which calls show_vector] and show(io, x::AbstractArray) [which calls showarray], both in base/show.jl
* You defined show(io, x::NamedArray). This is more specific than show(io, x::AbstractArray) because NamedArray is a specific subtype of AbstractArray), it should definitely get called for displaying NamedArray instances with ndims > 1
* However, it is ambiguous whether show(io, x::NamedArray) is more specific than show(io, x::AbstractVector). AbstractVector is equivalent to AbstractArray{T,1}. The type is more abstract than NamedArray in that it is a more abstract base type, but on the other hand the type is more specific than yours because it specifies a particular dimensionality.
Julia resolves this by calling show(io, x::AbstractVector) if show() is called with a NamedArray of dimension 1.
The solution is to simply define
show(io::IO, x::NamedVector) = invoke(show, (IO, NamedArray), io, x)
so that you have a show which is unambiguously more specific than show(io, x::AbstractVector) for 1d NamedArrays.